[bug-13371] [perspective] resolving conflict

build: b2019032708

When I click save in the designer I see a empty resolve conflict window:

output console reports:

> 10:32:14.122 [AWT-EventQueue-0] INFO designer.update-and-save - resolving 1 conflicts...
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> 	at java.base/java.util.Objects.requireNonNull(Unknown Source)
> 	at java.base/java.util.Optional.<init>(Unknown Source)
> 	at java.base/java.util.Optional.of(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel$FileDiffView.getData(ConflictResolutionDialog.java:577)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel$FileDiffView.<init>(ConflictResolutionDialog.java:538)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel.lambda$new$2(ConflictResolutionDialog.java:466)
> 	at java.base/java.util.ArrayList.forEach(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel.<init>(ConflictResolutionDialog.java:465)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog.lambda$new$9(ConflictResolutionDialog.java:267)
> 	at java.desktop/javax.swing.JTree.fireValueChanged(Unknown Source)
> 	at java.desktop/javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog.lambda$new$8(ConflictResolutionDialog.java:259)
> 	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source)
> 	at java.desktop/java.awt.Dialog.show(Unknown Source)
> 	at java.desktop/java.awt.Component.show(Unknown Source)
> 	at java.desktop/java.awt.Component.setVisible(Unknown Source)
> 	at java.desktop/java.awt.Window.setVisible(Unknown Source)
> 	at java.desktop/java.awt.Dialog.setVisible(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog.resolve(ConflictResolutionDialog.java:130)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner.pullAndResolve(IgnitionDesigner.java:1527)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1314)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.handleSaveAction(IgnitionDesigner.java:2596)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler$5.actionPerformed(IgnitionDesigner.java:2200)
> 	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> 	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
> 	at com.jidesoft.plaf.basic.BasicJideButtonListener.mouseReleased(Unknown Source)
> 	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
> 	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
> 	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> 	at java.base/java.util.Objects.requireNonNull(Unknown Source)
> 	at java.base/java.util.Optional.<init>(Unknown Source)
> 	at java.base/java.util.Optional.of(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel$FileDiffView.getData(ConflictResolutionDialog.java:577)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel$FileDiffView.<init>(ConflictResolutionDialog.java:538)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel.lambda$new$2(ConflictResolutionDialog.java:466)
> 	at java.base/java.util.ArrayList.forEach(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog$ConflictPanel.<init>(ConflictResolutionDialog.java:465)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog.lambda$new$9(ConflictResolutionDialog.java:267)
> 	at java.desktop/javax.swing.JTree.fireValueChanged(Unknown Source)
> 	at java.desktop/javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(Unknown Source)
> 	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(Unknown Source)
> 	at java.desktop/javax.swing.JTree.setSelectionPath(Unknown Source)
> 	at java.desktop/javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(Unknown Source)
> 	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(Unknown Source)
> 	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(Unknown Source)
> 	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
> 	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
> 	at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source)
> 	at java.desktop/java.awt.Dialog.show(Unknown Source)
> 	at java.desktop/java.awt.Component.show(Unknown Source)
> 	at java.desktop/java.awt.Component.setVisible(Unknown Source)
> 	at java.desktop/java.awt.Window.setVisible(Unknown Source)
> 	at java.desktop/java.awt.Dialog.setVisible(Unknown Source)
> 	at com.inductiveautomation.ignition.designer.project.ConflictResolutionDialog.resolve(ConflictResolutionDialog.java:130)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner.pullAndResolve(IgnitionDesigner.java:1527)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1314)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.handleSaveAction(IgnitionDesigner.java:2596)
> 	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler$5.actionPerformed(IgnitionDesigner.java:2200)
> 	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
> 	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> 	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
> 	at com.jidesoft.plaf.basic.BasicJideButtonListener.mouseReleased(Unknown Source)
> 	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
> 	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
> 	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.processEvent(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> 	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> 	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
> 10:33:02.618 [AWT-EventQueue-0] INFO designer.update-and-save - conflict resolution cancelled.

Interesting. Any idea how you got into this state, ie reproduction steps? Also, could you send a .gwbk or project export in?

Myself and a colleague were working on the same view. I updated a onClick action event script first, and then they continued to update it. Then I experienced the above when I tried to save my designer. In the end I was able to click remote and applied.

We can send project or gateway, which do you prefer and could you supply a private link?

Okay - I’ve opened an internal ticket to investigate. We’ll let you know if we need more info, or once this is resolved. Thanks for reporting.

The ticket associated with this issue has been fixed as of 4/19.

Thank you!