[bug?] importing perspective projects in 8.1

Attempting to import a project ZIP that's a subset of a valid gateway backup gives me

java.lang.IllegalArgumentException: Unable to create folder path, found non-folder in the way at 'com.inductiveautomation.perspective/views/Views'
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.insertFolders(DesignerProjectTreeImpl.java:263)
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.insertAllLocalParentFolders(DesignerProjectTreeImpl.java:224)
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.createResourceInternal(DesignerProjectTreeImpl.java:204)
	at com.inductiveautomation.ignition.designer.project.DesignerProjectTreeImpl.createResource(DesignerProjectTreeImpl.java:192)
	at com.inductiveautomation.ignition.designer.project.DesignableProject.createOrModify(DesignableProject.java:145)
	at com.inductiveautomation.ignition.designer.gui.import_export.ProjectImporter.lambda$doImport$2(ProjectImporter.java:311)
	at java.base/java.util.ArrayList.forEach(Unknown Source)
	at com.inductiveautomation.ignition.designer.gui.import_export.ProjectImporter.doImport(ProjectImporter.java:311)
	at com.inductiveautomation.ignition.designer.gui.import_export.ProjectImporter.lambda$new$0(ProjectImporter.java:109)
	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 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(Unknown Source)
	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(Unknown Source)
	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)

Ignition v8.1.48 (b2025042910)
Java: Azul Systems, Inc. 17.0.14

the project itself is valid (if i put it into a gwbk it loads fine)

Here's the filestructure:


(Views is separate from Components which is e.g. where embedded views go)

I know the project is valid bc if i put it in the right projects folder of a gateway backup, it deserializes with no issue/error. (Which is weird, since it suggests that project serdes for import project and the spawned project serdes for gateway restores are different codepaths)

ok when i save the project after that error, i do end up somehow with a perspective window loaded (Boilersystem) but it's not accessible from the sidebar:


Boilersystem is there, but Views doesn't click into anything???

Can you provide a project export that can be used to demonstrate/reproduce?

1 Like

newperspwindow.zip (19.3 KB)
here you go!

Seems to work for me? :person_shrugging:

With or without an existing Views folder with existing views in it.

1 Like

...huh. I'll restart my designer and see if it reproes.

Ok, it didn't repro this time, which suggests the issue is actually earlier in some bad state change and the above is just a symptom?

I'll keep an eye out.

I've seen stuff like this happen before; the designer itself has a fairly tricky bit of internal state management for the project browser tree and it sometimes gets out of wack. Wouldn't surprise me if something you did that was apparently innocuous ended up with weird stuff like this happening (much) later down the line.

1 Like

yeah that's my bet as to what happened