Issue restoring from a backup _not_ containing a specific perspective view

If i'm in the designer manipulating view X, and i then restore a gateway backup not containing view X, and then I update the designer, it throws a jswing error on project update and puts the designer into a weird broken state where the new views from that gateway backup aren't visible

Retest this next week, I just merged some changes yesterday with conflicts/updates not being resolved correctly. This might also be nothing, because some of the logic around "I'm in a weird state and should give up" is disabled in non-versioned builds.

The full error stacktrace might be useful too :smiley:

1 Like

if/when i repro it again i'll send over the full stack trace. good to know RE conflicts/updates, i can consistently brick the designer in new and interesting ways with project imports (i can get the designer to allow me to edit a view that doesn't show up in the project browser lol)

1 Like

@PGriffith full stacktrace:

java.lang.NullPointerException: Cannot invoke "javax.swing.JComponent.isVisible()" because "icon" is null
	at com.inductiveautomation.ignition.client.jsonedit.NodeEditor$MainEditorLayout.layoutContainer(NodeEditor.java:585)
	at java.desktop/java.awt.Container.layout(Unknown Source)
	at java.desktop/java.awt.Container.doLayout(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validateTree(Unknown Source)
	at java.desktop/java.awt.Container.validate(Unknown Source)
	at java.desktop/javax.swing.JLayeredPane.addImpl(Unknown Source)
	at java.desktop/java.awt.Container.add(Unknown Source)
	at java.desktop/javax.swing.JRootPane.setContentPane(Unknown Source)
	at com.jidesoft.docking.DockableFrame.setContentPane(Unknown Source)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.PropertyEditorFrame.setDesignAdapter(PropertyEditorFrame.java:197)
	at com.inductiveautomation.perspective.designer.workspace.ViewWorkspace$2.lambda$stateChanged$0(ViewWorkspace.java:283)
	at java.base/java.util.ArrayList.forEach(Unknown Source)
	at com.inductiveautomation.perspective.designer.workspace.ViewWorkspace$2.stateChanged(ViewWorkspace.java:283)
	at java.desktop/javax.swing.DefaultSingleSelectionModel.fireStateChanged(Unknown Source)
	at com.jidesoft.swing.JideTabbedPane$IgnoreableSingleSelectionModel.fireStateChanged(Unknown Source)
	at java.desktop/javax.swing.DefaultSingleSelectionModel.setSelectedIndex(Unknown Source)
	at java.desktop/javax.swing.JTabbedPane.setSelectedIndexImpl(Unknown Source)
	at java.desktop/javax.swing.JTabbedPane.removeTabAt(Unknown Source)
	at com.jidesoft.swing.JideTabbedPane.removeTabAt(Unknown Source)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.TabbedResourceWorkspace.close(TabbedResourceWorkspace.java:324)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.TabbedResourceWorkspace$4.resourcesDeleted(TabbedResourceWorkspace.java:165)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyListener(AbstractResourceCollection.java:343)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyResourceListeners(AbstractResourceCollection.java:315)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.updateEffectiveState(AbstractResourceCollection.java:156)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.updateEffectiveState(AbstractResourceCollection.java:135)
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.updateEffectiveState(DesignerProjectTreeImpl.java:87)
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.applyChange(DesignerProjectTreeImpl.java:619)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner.pullAndResolve(IgnitionDesigner.java:1727)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.lambda$handleUpdate$16(IgnitionDesigner.java:2710)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:251)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:241)
	at com.inductiveautomation.ignition.client.util.gui.progress.Task.lambda$runInternal$3(Task.java:207)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Ignition v(Dev Version)
Java: Azul Systems, Inc. 17.0.14
1 Like

Huh, funky. I strongly suspect this isn't unique to 8.1.

huh -- well, if you want 8.1.48 compliant backups that consistently induce the issue in 8.3 designer and repro steps, lmk.

short version: have perspective view open in designer, restore backup that doesn't contain that view, update project

1 Like