Upgrading from 1.5.3 FlowUI (java 17) to 2.0.0 (Kotlin) -> Migration failed

When I tried to upgrade my Kotlin FlowUI project to 2.0.0 I got the following error:

Migration failed: com.intellij.util.IncorrectOperationException: Modification not implemented. To avoid project inconsistent state, please revert all changes made during unsuccessful migration attempt. You can use Edit > Undo Migrate Project, Local History or VCS to perform revert.

This looks like the error message in the IntelliJ Log:

Summary
...
2023-07-24 15:05:55,085 [ 588135]   INFO - #com.haulmont.jmixstudio.buildsystem.gradle.migrator.Migrator_2_0 - [Jmix Migration] Updating application properties
2023-07-24 15:05:55,101 [ 588151]   INFO - #com.haulmont.jmixstudio.buildsystem.gradle.migrator.Migrator_2_0 - [Jmix Migration] Updating "ui.loginToUi" specific permission
2023-07-24 15:05:55,201 [ 588251]   WARN - #com.haulmont.jmixstudio.buildsystem.gradle.migrator.BaseMigrator - [Jmix Migration] Migration Failed
com.intellij.util.IncorrectOperationException: Modification not implemented.
	at org.jetbrains.kotlin.asJava.classes.ImplUtilsKt.cannotModify(implUtils.kt:27)
	at org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry.setDeclaredAttributeValue(lightAnnotations.kt:208)
	at org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry.setDeclaredAttributeValue(lightAnnotations.kt:43)
	at com.haulmont.jmixstudio.buildsystem.gradle.migrator.Migrator_2_0.migrateLoginToUiSpecificPolicy$lambda$33(Migrator_2_0.kt:367)
	at com.intellij.openapi.command.WriteCommandAction.lambda$runWriteCommandAction$4(WriteCommandAction.java:360)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$1(WriteCommandAction.java:149)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:956)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$2(WriteCommandAction.java:147)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:219)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:184)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.doRunWriteCommandAction(WriteCommandAction.java:156)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.run(WriteCommandAction.java:123)
	at com.intellij.openapi.command.WriteCommandAction.runWriteCommandAction(WriteCommandAction.java:360)
	at com.haulmont.jmixstudio.buildsystem.gradle.migrator.Migrator_2_0.migrateLoginToUiSpecificPolicy(Migrator_2_0.kt:356)
	at com.haulmont.jmixstudio.buildsystem.gradle.migrator.Migrator_2_0.performOtherMigrationActions(Migrator_2_0.kt:66)
	at com.haulmont.jmixstudio.buildsystem.gradle.migrator.BaseMigrator.migrate(BaseMigrator.kt:49)
	at com.haulmont.jmixstudio.intellij.ui.pm.MigrationProcessor.lambda$migrate$4(MigrationProcessor.java:59)
	at com.haulmont.jmixstudio.intellij.ui.pm.MigrationProcessor.performMigration(MigrationProcessor.java:151)
	at com.haulmont.jmixstudio.intellij.ui.pm.MigrationProcessor.migrate(MigrationProcessor.java:60)
	at com.haulmont.jmixstudio.intellij.ui.pm.projectProperties.JmixProjectPropertiesDialog.migrateApplyAndClose(JmixProjectPropertiesDialog.kt:152)
	at com.haulmont.jmixstudio.intellij.ui.pm.projectProperties.JmixProjectPropertiesDialog.doOKAction(JmixProjectPropertiesDialog.kt:135)
	at com.intellij.openapi.ui.DialogWrapper$OkAction.doAction(DialogWrapper.java:1863)
	at com.haulmont.jmixstudio.intellij.ui.pm.projectProperties.JmixProjectPropertiesDialog$createDefaultActions$1.doAction(JmixProjectPropertiesDialog.kt:114)
	at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1817)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6656)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3385)
	at java.desktop/java.awt.Component.processEvent(Component.java:6421)
	at java.desktop/java.awt.Container.processEvent(Container.java:2266)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2804)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:790)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:763)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:761)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:760)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:667)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.kt:615)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:570)
	at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:68)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:349)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:348)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:348)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:343)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:995)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:995)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$4(IdeEventQueue.kt:343)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:829)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:385)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121)
	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)
	at java.desktop/java.awt.Dialog.show(Dialog.java:1080)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:741)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:466)
	at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1675)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1633)
	at com.haulmont.jmixstudio.intellij.action.cubamenu.JmixProjectPropertiesAction.doActionPerformed(JmixProjectPropertiesAction.java:80)
	at com.haulmont.jmixstudio.intellij.action.JmixProjectAction.lambda$actionPerformed$0(JmixProjectAction.java:108)
	at com.haulmont.jmixstudio.buildsystem.gradle.GradleBuildSystemProjectManager.checkSyncedAndRun(GradleBuildSystemProjectManager.kt:118)
	at com.haulmont.jmixstudio.intellij.action.JmixProjectAction.actionPerformed(JmixProjectAction.java:108)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:333)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:307)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:356)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:307)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.invokeAction(ActionUtil.java:532)
	at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:252)
	at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$1(ActionPopupStep.java:229)
	at com.intellij.ui.popup.AbstractPopup.lambda$dispose$17(AbstractPopup.java:1618)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:172)
	at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:33)
	at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.kt:187)
	at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.kt:153)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:168)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:162)
	at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1616)
	at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:165)
	at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:391)
	at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:290)
	at com.intellij.openapi.util.ObjectTree.runWithTrace(ObjectTree.java:127)
	at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:159)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:264)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:252)
	at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:273)
	at com.intellij.ui.popup.list.ListPopupImpl.disposePopup(ListPopupImpl.java:485)
	at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:512)
	at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:479)
	at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:426)
	at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:302)
	at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:680)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6656)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3385)
	at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:745)
	at java.desktop/java.awt.Component.processEvent(Component.java:6421)
	at java.desktop/java.awt.Container.processEvent(Container.java:2266)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2804)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:790)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:763)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:761)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:760)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:667)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.kt:615)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:570)
	at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:68)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:349)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:348)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:348)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:343)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:995)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:113)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:995)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$4(IdeEventQueue.kt:343)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:829)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:385)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

  • I then set the jmix.bomVersion manually to 2.0.0 in the build.gradle. The plugin version was already set to 2.0.0.
  • gradle wrapper was also already set to 8.0.2
  • Built the project

The server starts, but I only get a blank screen in the browser and the console says: “Failed to load resource: the server responded with a status of 403”

Hi, Klaus

Jmix 1.5 doesn’t provide project template for Kotlin Flow UI project. So Studio doesn’t expect such projects to be migrated to Jmix 2.0.

The error in the log attached relates to migration of specific policy in UiMinimalRole
@SpecificPolicy(resources = "flowui.loginToUi")@SpecificPolicy(resources = "ui.loginToUi")

But in your case we can’t be sure that the other migrations performed well. I think the best option for you is to create blank Jmix 1.5 project, initialize Git repo and perform migration for it. So using diff preview you can easily check which modifications is missing in your Kotlin project and make them manually.

1 Like

Thank you, good idea, will do that and report back. :slight_smile:

Ok, the problem was mainly the missing flowui → ui specific policy. Then I had to do a lot of cleaning (clean, vaadinClean, remove package.json, node_modules, dev-bundle, …) - then it finally worked. Thanks :slight_smile:

2 Likes