Modify

Opened 9 years ago

Closed 9 years ago

#7110 closed defect (fixed)

Adding a node to multipolygon causes an exception

Reported by: Daeron Owned by: Don-vip
Priority: critical Milestone:
Component: Core Version: latest
Keywords: Cc:

Description

Adding a node to a way that is part of a multipolygon relation causes an exception. This bug was introduced in r4630.

Attached is a test file that includes a simple multipolygon with one outer way and one inner way. Adding a node to either one of those ways produces the following exception.

Build-Date: 2011-12-04 06:38:10
Revision: 4630
Is-Local-Build: true

Identification: JOSM/1.5 (4630 SVN fi)
Memory Usage: 151 MB / 910 MB (86 MB allocated, but free)
Java version: 1.6.0_29, Sun Microsystems Inc., Java HotSpot(TM) 64-Bit Server VM
Operating system: Linux

Dataset consistency test:
Exception during dataset integrity test:
java.lang.NullPointerException
	at org.openstreetmap.josm.data.osm.DatasetConsistencyTest.checkReferredPrimitive(DatasetConsistencyTest.java:99)
	at org.openstreetmap.josm.data.osm.DatasetConsistencyTest.referredPrimitiveNotInDataset(DatasetConsistencyTest.java:115)
	at org.openstreetmap.josm.data.osm.DatasetConsistencyTest.runTest(DatasetConsistencyTest.java:139)
	at org.openstreetmap.josm.data.osm.DatasetConsistencyTest.runTests(DatasetConsistencyTest.java:157)
	at org.openstreetmap.josm.actions.ShowStatusReportAction.getReportHeader(ShowStatusReportAction.java:67)
	at org.openstreetmap.josm.tools.BugReportExceptionHandler.handleException(BugReportExceptionHandler.java:106)
	at org.openstreetmap.josm.tools.BugReportExceptionHandler.handle(BugReportExceptionHandler.java:47)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at java.awt.EventDispatchThread.handleException(EventDispatchThread.java:385)
	at java.awt.EventDispatchThread.processException(EventDispatchThread.java:291)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:285)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Plugin: ImproveWayAccuracy (27178)
Plugin: PicLayer (27178)
Plugin: editgpx (27038)
Plugin: lakewalker (27178)
Plugin: licensechange (27161)
Plugin: measurement (26731)
Plugin: reverter (27019)
Plugin: utilsplugin2 (27178)

java.lang.NullPointerException
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.resetNodes(Multipolygon.java:286)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.wayNodesChanged(Multipolygon.java:323)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.dispatchEvent(MultipolygonCache.java:180)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.processEvent(MultipolygonCache.java:162)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:149)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:128)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:123)
	at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.wayNodesChanged(MultipolygonCache.java:214)
	at org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent.fire(WayNodesChangedEvent.java:22)
	at org.openstreetmap.josm.data.osm.DataSet.fireEventToListeners(DataSet.java:1022)
	at org.openstreetmap.josm.data.osm.DataSet.endUpdate(DataSet.java:1001)
	at org.openstreetmap.josm.data.osm.OsmPrimitive.writeUnlock(OsmPrimitive.java:323)
	at org.openstreetmap.josm.data.osm.Way.cloneFrom(Way.java:265)
	at org.openstreetmap.josm.command.ChangeCommand.executeCommand(ChangeCommand.java:43)
	at org.openstreetmap.josm.command.SequenceCommand.executeCommand(SequenceCommand.java:53)
	at org.openstreetmap.josm.data.UndoRedoHandler.addNoRedraw(UndoRedoHandler.java:36)
	at org.openstreetmap.josm.data.UndoRedoHandler.add(UndoRedoHandler.java:58)
	at org.openstreetmap.josm.actions.mapmode.DrawAction.mouseReleased(DrawAction.java:529)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Attachments (1)

multipolygon-exception.osm (1.1 KB) - added by Daeron 9 years ago.

Download all attachments as: .zip

Change History (11)

Changed 9 years ago by Daeron

Attachment: multipolygon-exception.osm added

comment:1 Changed 9 years ago by jezevec

This bug is in 4629 too, but I update now. Node add cannot be undo - no record in changes. This is on boundary = administrative.

Repository Root: http://josm.openstreetmap.de/svn
Build-Date: 2011-12-04 02:31:53
Last Changed Author: Don-vip
Revision: 4630
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
URL: http://josm.openstreetmap.de/svn/trunk
Last Changed Date: 2011-12-04 00:30:57 +0100 (Sun, 04 Dec 2011)
Last Changed Rev: 4630

Identification: JOSM/1.5 (4630 cs)
Memory Usage: 222 MB / 3640 MB (71 MB allocated, but free)
Java version: 1.6.0_29, Sun Microsystems Inc., Java HotSpot(TM) 64-Bit Server VM
Operating system: Windows 7
Dataset consistency test: No problems found

Plugin: OpeningHoursEditor (26986)
Plugin: Tracer (26731)
Plugin: licensechange (27161)
Plugin: mapdust (26731)
Plugin: measurement (26731)
Plugin: openstreetbugs (26986)
Plugin: reltoolbox (26986)
Plugin: utilsplugin2 (26986)

java.lang.NullPointerException

at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.resetNodes(Multipolygon.java:282)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.wayNodesChanged(Multipolygon.java:328)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.dispatchEvent(MultipolygonCache.java:180)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.processEvent(MultipolygonCache.java:162)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:149)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:128)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:123)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.wayNodesChanged(MultipolygonCache.java:214)
at org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent.fire(WayNodesChangedEvent.java:22)
at org.openstreetmap.josm.data.osm.DataSet.fireEventToListeners(DataSet.java:1022)
at org.openstreetmap.josm.data.osm.DataSet.endUpdate(DataSet.java:1001)
at org.openstreetmap.josm.data.osm.OsmPrimitive.writeUnlock(OsmPrimitive.java:323)
at org.openstreetmap.josm.data.osm.Way.cloneFrom(Way.java:265)
at org.openstreetmap.josm.command.ChangeCommand.executeCommand(ChangeCommand.java:43)
at org.openstreetmap.josm.command.SequenceCommand.executeCommand(SequenceCommand.java:53)
at org.openstreetmap.josm.data.UndoRedoHandler.addNoRedraw(UndoRedoHandler.java:36)
at org.openstreetmap.josm.data.UndoRedoHandler.add(UndoRedoHandler.java:58)
at org.openstreetmap.josm.actions.mapmode.SelectAction.mouseDragged(SelectAction.java:422)
at java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

comment:2 Changed 9 years ago by Don-vip

Owner: changed from team to Don-vip
Status: newassigned

comment:3 Changed 9 years ago by Don-vip

In [4631/josm]:

see #7110 and #6987 - Use getUniqueId() to handle newly created primitive objects

comment:4 Changed 9 years ago by Don-vip

Resolution: fixed
Status: assignedclosed

comment:5 Changed 9 years ago by jezevec

Resolution: fixed
Status: closedreopened

Bug still there - 4638, after add node to boundary way in realtion

Repository Root: http://josm.openstreetmap.de/svn
Build-Date: 2011-12-06 02:32:13
Last Changed Author: bastiK
Revision: 4638
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
URL: http://josm.openstreetmap.de/svn/trunk
Last Changed Date: 2011-12-05 17:54:30 +0100 (Mon, 05 Dec 2011)
Last Changed Rev: 4638

Identification: JOSM/1.5 (4638 cs)
Memory Usage: 989 MB / 989 MB (354 MB allocated, but free)
Java version: 1.6.0_29, Sun Microsystems Inc., Java HotSpot(TM) Client VM
Operating system: Windows Vista
Dataset consistency test: No problems found

Plugin: ElevationProfile (26946)
Plugin: Tracer (26731)
Plugin: buildings_tools (26731)
Plugin: czechaddress (26731)
Plugin: download_along (26731)
Plugin: licensechange (27161)
Plugin: measurement (26731)
Plugin: multipoly-convert (26928)
Plugin: openstreetbugs (26986)
Plugin: plastic_laf (26605)
Plugin: reverter (27159)
Plugin: turnrestrictions (26986)
Plugin: undelete (26928)
Plugin: utilsplugin2 (26986)
Plugin: waydownloader (26986)

java.lang.NullPointerException

at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.resetNodes(Multipolygon.java:282)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon$PolyData.wayNodesChanged(Multipolygon.java:328)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.dispatchEvent(MultipolygonCache.java:181)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.processEvent(MultipolygonCache.java:162)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:149)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:128)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.updateMultipolygonsReferringTo(MultipolygonCache.java:123)
at org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache.wayNodesChanged(MultipolygonCache.java:216)
at org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent.fire(WayNodesChangedEvent.java:22)
at org.openstreetmap.josm.data.osm.DataSet.fireEventToListeners(DataSet.java:1022)
at org.openstreetmap.josm.data.osm.DataSet.endUpdate(DataSet.java:1001)
at org.openstreetmap.josm.data.osm.OsmPrimitive.writeUnlock(OsmPrimitive.java:323)
at org.openstreetmap.josm.data.osm.Way.cloneFrom(Way.java:265)
at org.openstreetmap.josm.command.ChangeCommand.executeCommand(ChangeCommand.java:43)
at org.openstreetmap.josm.command.SequenceCommand.executeCommand(SequenceCommand.java:53)
at org.openstreetmap.josm.data.UndoRedoHandler.addNoRedraw(UndoRedoHandler.java:36)
at org.openstreetmap.josm.data.UndoRedoHandler.add(UndoRedoHandler.java:58)
at org.openstreetmap.josm.actions.mapmode.SelectAction.mouseDragged(SelectAction.java:422)
at java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

comment:6 Changed 9 years ago by Don-vip

I don't reproduce it, can you give me more details on what you've done, please ?

comment:7 Changed 9 years ago by jezevec

Yep, use (ie) this as box http://www.openstreetmap.org/?lat=50.481949&lon=13.432414&zoom=18 for download.
Test add node with drag("S" - mode) to boundary (orange way in josm). Or, you can get same error after simple add node on this way ("A" - mode)

I test this on another boudary and seems bug is not on all.

comment:8 Changed 9 years ago by Don-vip

OK I got it ! Thanks ! :)

comment:9 Changed 9 years ago by Don-vip

In [4639/josm]:

see #7110 and #6987 - Create a new ArrayList to hold Nodes in PolyData

comment:10 Changed 9 years ago by jezevec

Resolution: fixed
Status: reopenedclosed

Works for me in 4639

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Don-vip.
as The resolution will be set.
The resolution will be deleted.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.