NPE when exporting PlatformArchitectures from the DSE
Observed exception
!ENTRY org.eclipse.ui 4 0 2019-09-19 13:54:20.977
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException
at
org.fortiss.tooling.kernel.internal.ElementCompositorService.decompose(ElementCompositorService.java:148)
at
org.fortiss.af3.exploration.solutionconverter.platform.PlatformExecUnitInstantiationConverter.lambda$1(PlatformExecUnitInstantiationConverter.java:108)
at
java.base/java.util.stream.ForEachOpsForEachOp
OfRef.accept(ForEachOps.java:183)
at
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at
java.base/java.util.stream.ForEachOps$ForEachOevaluateSequential(ForEachOps.java:150)
at
java.base/java.util.stream.ForEachOpsForEachOp
OfRef.evaluateSequential(ForEachOps.java:173)
at
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at
org.fortiss.af3.exploration.solutionconverter.platform.PlatformExecUnitInstantiationConverter.transform(PlatformExecUnitInstantiationConverter.java:108)
at
org.fortiss.af3.exploration.solutionconverter.platform.PlatformExecUnitInstantiationConverter.transform(PlatformExecUnitInstantiationConverter.java:1)
at
org.fortiss.af3.exploration.service.internal.DSESolutionExporterService.transform(DSESolutionExporterService.java:108)
at
org.fortiss.af3.exploration.ui.perspective.visualization.visualizations.table.ExportButtonColumnLabelProvider$SolutionExportAdapter.transformSolutions(ExportButtonColumnLabelProvider.java:78)
at
org.fortiss.af3.exploration.ui.perspective.visualization.visualizations.table.ExportButtonColumnLabelProvider$SolutionExportAdapter.widgetSelected(ExportButtonColumnLabelProvider.java:69)
at
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5874)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1400)
at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5138)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4663)
at
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1173)
at
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)
at
org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:635)
at
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
at
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at
org.fortiss.af3.rcapplication.AF3Application.start(AF3Application.java:49)
at
org.eclipse.equinox.internal.apEclipseAppHandle.run(EclipseAppHandle.java:203)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:660)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597)
at org.eclipse.equinox.launcher.Main.run(Main.java:1468)
at org.eclipse.equinox.launcher.Main.main(Main.java:1441)
Resolution
Swap the decomposition order: If an element hosting connectors is decomposed, the ports are as well. Thus, decomposing its connections will try to decompose connectors that are not contained in any element, which will fail.
(from redmine: issue id 3825, created on 2019-09-19, closed on 2019-09-26)