Runtime Exception при рефакторинге дескриптора screen на fragment

Добрый день.
Наткнулся на ошибку плагина
Jmix plugin 1.1.6-213
IntelliJ IDEA 2021.3.2

Есть сгенерированный UI контроллер экрана и xml дескриптор для него.
В какой-то момент я решил отрефакторить экран, заменив его на фрагмент.
Изменения начал вносить, начиная с xml дескриптора.
Вручную сделал заготовку <fragment … />, что бы копипастить в него контент из структуры
<window …/>
Т.е. xml дескриптор в какой-то момент стал выглядеть примерно вот так
<fragment …>


<window …>


После этого плагин упал с ошибкой, а содержимое файла перестало отображаться в панели редактирования. После закрытия закладки, повторно открыть файл в панели редактирования IDEA я уже не смог. Пришлось открывать сторонний текстовый редактор и довносить изменения за пределами IDE.

Стек ошибки, после которого файл невозможно открыть в IDEA

Stack trace

java.lang.RuntimeException: Psi element(xml descriptor or UiController class) not found for Screen
at com.haulmont.jmixstudio.backend.model.Screen.getPsiElement(Screen.java:495)
at com.haulmont.jmixstudio.backend.model.Screen.(Screen.java:96)
at com.haulmont.jmixstudio.backend.model.Screen.lambda$fromScreenItem$2(Screen.java:165)
at com.haulmont.jmixstudio.util.EntityUtil.lambda$raPsiCached$36(EntityUtil.java:787)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:158)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:39)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$3(CachedValueBase.java:227)
at com.intellij.util.CachedValueBase.computeData(CachedValueBase.java:42)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$4(CachedValueBase.java:227)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:114)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:44)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:228)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:28)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:72)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:155)
at com.haulmont.jmixstudio.util.EntityUtil.lambda$raPsiCached$37(EntityUtil.java:785)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:852)
at com.haulmont.jmixstudio.util.EntityUtil.ra(EntityUtil.java:771)
at com.haulmont.jmixstudio.util.EntityUtil.raPsiCached(EntityUtil.java:785)
at com.haulmont.jmixstudio.backend.model.Screen.fromScreenItem(Screen.java:159)
at com.haulmont.jmixstudio.backend.model.Screen.fromDescriptor(Screen.java:151)
at com.haulmont.jmixstudio.intellij.ui.sd.ScreenTextEditorWithPreview.getScreen(ScreenTextEditorWithPreview.java:720)
at com.haulmont.jmixstudio.intellij.ui.sd.ScreenTextEditorWithPreview.createToolbar(ScreenTextEditorWithPreview.java:689)
at com.haulmont.jmixstudio.intellij.ui.sd.ScreenTextEditorWithPreview$SplitEditorToolbar.initLeftToolbar(ScreenTextEditorWithPreview.java:644)
at com.haulmont.jmixstudio.intellij.ui.sd.ScreenTextEditorWithPreview$SplitEditorToolbar.(ScreenTextEditorWithPreview.java:628)
at com.haulmont.jmixstudio.intellij.ui.sd.ScreenTextEditorWithPreview.getComponent(ScreenTextEditorWithPreview.java:280)
at com.intellij.openapi.fileEditor.impl.EditorComposite.createEditorComponent(EditorComposite.java:201)
at com.intellij.openapi.fileEditor.impl.EditorComposite.(EditorComposite.java:131)
at com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite.(EditorWithProviderComposite.java:18)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.createComposite(FileEditorManagerImpl.java:1143)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4Edt(FileEditorManagerImpl.java:1022)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.lambda$openFileImpl4$17(FileEditorManagerImpl.java:976)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.runBulkTabChange(FileEditorManagerImpl.java:1793)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.lambda$openFileImpl4$18(FileEditorManagerImpl.java:975)
at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:437)
at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:455)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:972)
at com.jetbrains.rdserver.fileEditors.BackendServerFileEditorManager.openFileImpl4(BackendServerFileEditorManager.kt:43)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.lambda$openFileImpl2$14(FileEditorManagerImpl.java:898)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:210)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:164)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:150)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:897)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:771)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:738)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.lambda$openEditorImpl$22(FileEditorManagerImpl.java:1276)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:210)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:164)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:150)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openEditorImpl(FileEditorManagerImpl.java:1270)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileEditor(FileEditorManagerImpl.java:1246)
at com.intellij.openapi.fileEditor.FileEditorManager.openEditor(FileEditorManager.java:225)
at com.intellij.openapi.fileEditor.FileNavigatorImpl.navigateInAnyFileEditor(FileNavigatorImpl.java:81)
at com.intellij.openapi.fileEditor.FileNavigatorImpl.navigateInEditor(FileNavigatorImpl.java:62)
at com.intellij.openapi.fileEditor.FileNavigatorImpl.navigateInEditorOrNativeApp(FileNavigatorImpl.java:47)
at com.intellij.openapi.fileEditor.FileNavigatorImpl.navigate(FileNavigatorImpl.java:30)
at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigate(OpenFileDescriptor.java:91)
at com.intellij.psi.impl.source.PsiFileImpl.navigate(PsiFileImpl.java:915)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.lambda$navigateOrCreatePopup$2(PsiElementListNavigator.java:108)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator$NavigateOrPopupHelper.navigateOrCreatePopup(PsiElementListNavigator.java:205)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.navigateOrCreatePopup(PsiElementListNavigator.java:129)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.navigateOrCreatePopup(PsiElementListNavigator.java:105)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.openTargets(PsiElementListNavigator.java:54)
at com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.openTargets(PsiElementListNavigator.java:45)
at com.haulmont.jmixstudio.intellij.codeinsight.XmlDescriptorMarkerType$Navigator.browse(XmlDescriptorMarkerType.java:109)
at com.intellij.codeInsight.daemon.impl.MarkerType.lambda$new$0(MarkerType.java:47)
at com.intellij.openapi.project.DumbService.withAlternativeResolveEnabled(DumbService.java:353)
at com.intellij.codeInsight.daemon.impl.MarkerType.lambda$new$1(MarkerType.java:47)
at com.intellij.codeInsight.daemon.NavigateAction.actionPerformed(NavigateAction.java:61)
at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:244)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:265)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:244)
at com.intellij.openapi.editor.impl.EditorGutterComponentImpl.performAction(EditorGutterComponentImpl.java:2099)
at com.intellij.openapi.editor.impl.EditorGutterComponentImpl.invokeGutterAction(EditorGutterComponentImpl.java:2038)
at com.intellij.openapi.editor.impl.EditorGutterComponentImpl.mouseReleased(EditorGutterComponentImpl.java:2016)
at com.intellij.openapi.editor.impl.EditorImpl.processMouseReleased(EditorImpl.java:2349)
at com.intellij.openapi.editor.impl.EditorImpl$MyMouseAdapter.lambda$runMouseReleasedCommand$1(EditorImpl.java:3939)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:219)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174)
at com.intellij.openapi.editor.impl.EditorImpl$MyMouseAdapter.runMouseReleasedCommand(EditorImpl.java:3941)
at com.intellij.openapi.editor.impl.EditorImpl$MyMouseAdapter.mouseReleased(EditorImpl.java:3825)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
at java.desktop/java.awt.Component.processEvent(Component.java:6419)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2790)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:891)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:820)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:757)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:498)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

День добрый, Дмитрий. По Вашему вопросу был создан тикет, спасибо что помогаете сделать Jmix лучше. :slight_smile: