IllegalArgumentException registering global model element categories

In a current developer installation, I now see below exception when starting AF3 (both with a fresh and a populated runtime workspace):

Strack trace !ENTRY org.fortiss.af3.component.ui 4 0 2025-09-17 09:42:56.979 !MESSAGE Error setting the category priority for the prototype category 'Component Architecture'. !STACK 0 java.lang.IllegalArgumentException: Cannot set category priority since no prototype category exists with the given name 'Component Architecture'. at org.fortiss.tooling.kernel.extension.base.PrototypeProviderBase.setPrototypeCategoryPriority(PrototypeProviderBase.java:165) at org.fortiss.af3.component.ui.prototypes.PrototypeProvider.setCategoryPrio(PrototypeProvider.java:95) at org.fortiss.af3.component.ui.prototypes.PrototypeProvider.setupComponentArchitecturePrototypes(PrototypeProvider.java:66) at org.fortiss.af3.component.ui.prototypes.PrototypeProvider.registerPrototypes(PrototypeProvider.java:54) at org.fortiss.tooling.kernel.extension.base.PrototypeProviderBase.(PrototypeProviderBase.java:57) at org.fortiss.tooling.kernel.extension.base.GloballyCategorizedPrototypeProviderBase.(GloballyCategorizedPrototypeProviderBase.java:34) at org.fortiss.af3.component.ui.prototypes.PrototypeProvider.(PrototypeProvider.java:39) at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) at org.fortiss.tooling.kernel.internal.PrototypeService.setupPrototypes(PrototypeService.java:135) at org.fortiss.tooling.kernel.internal.PrototypeService.initializeService(PrototypeService.java:86) at org.fortiss.tooling.kernel.internal.ToolingKernelInternal.initializeKernel(ToolingKernelInternal.java:42) at org.fortiss.tooling.kernel.ToolingKernel.initialize(ToolingKernel.java:30) at org.fortiss.af3.rcp.application.advisors.ApplicationWorkbenchAdvisor.initialize(ApplicationWorkbenchAdvisor.java:87) at org.eclipse.ui.application.WorkbenchAdvisor.internalBasicInitialize(WorkbenchAdvisor.java:171) at org.eclipse.ui.internal.Workbench$18.runWithException(Workbench.java:1766) at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:35) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:183) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4853) at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:93) at org.eclipse.ui.internal.Workbench.init(Workbench.java:1762) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2867) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:661) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:576) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173) at org.fortiss.af3.rcp.application.AF3Application.start(AF3Application.java:49) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:670) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:607) at org.eclipse.equinox.launcher.Main.run(Main.java:1492) at org.eclipse.equinox.launcher.Main.main(Main.java:1465)

Analysis:

  • Prototypes and their categories are set up in org.fortiss.tooling.kernel.internal.PrototypeService.setupPrototypes().
  • If multipe plugins contribute to the same global prototype category (here: "Component Architecture" in org.fortiss.af3.soa.ui and org.fortiss.af3.component.ui), then org.fortiss.tooling.kernel.extension.base.GloballyCategorizedPrototypeProviderBase.registerPrototypeCategory(String, boolean) will not add the categorie to the inherited field categories since it is already in singletonCategories
Edited by Simon Barner