PRIORITY ONE Remove Null Pointer exception, when triggering init annotation on "derived changeable feature", that triggers an update annotation.
PRIORITY ONE
All explained in the following screencast:
-
import the following export file uniqueProductAndElementId_202404201410.mcore
-
run in dynamic editor, it will successfully after creation of a new product execute the init annotation of the derived changeable feature "Set Product Id", which triggers two update annotations:
- the first sets the "Product Id" to self.catalog.nextProductId
- the second sete the nextProductId of self.catalog to self.catalog.nextProductId+1
This is an important use case, as it is needed to give unique domain IDs, which is often needed.
Now when I run the very same editor in the generated editor (attention: the generated editor can only be started after having run the dynamic editor once, as the import seems to not fully trigger the EMF generation. Thus either run the dynamic editor first once, or explicitly regenerate the Ecore before running the dynamic editor.
... I get a null pointer exception when creating a new product, and then the new product is not shown, I need to refresh, and then the productId is not set, and the nextProductId of the catalog is not incremented.
Here the error it creates: java.lang.NullPointerException at org.xocl.editorconfig.impl.RowFeatureCellImpl.getCellValue(RowFeatureCellImpl.java:398) at org.xocl.editorconfig.ui.TableConfigLabelProvider.getColumnText(TableConfigLabelProvider.java:116) at org.xocl.editorconfig.ui.AbstractViewerManagerColumnViewerLabelProvider.getColumnText(AbstractViewerManager.java:1032) at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:66) at org.eclipse.jface.viewers.TreeColumnViewerLabelProvider.update(TreeColumnViewerLabelProvider.java:1) at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:141) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:949) at org.eclipse.jface.viewers.AbstractTreeViewerUpdateItemSafeRunnable.run(AbstractTreeViewer.java:118) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil1.run(JFaceUtil.java:50) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1029) at org.eclipse.jface.viewers.StructuredViewerUpdateItemSafeRunnable.run(StructuredViewer.java:474) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2170) at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2743) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1913) at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:669) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1920) at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:669) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1920) at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:669) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1888) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1845) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1831) at org.eclipse.jface.viewers.StructuredViewer.lambda0(StructuredViewer.java:1519) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1458) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:354) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1419) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1519) at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:523) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1478) at org.xocl.editorconfig.ui.ViewManagerContentProviderScheduledRefresh.run(ViewManagerContentProvider.java:336) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4211) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3827) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) at org.eclipse.equinox.launcher.Main.run(Main.java:1519) at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
When doing the screencast, I found that the error is already triggered on opening of the model, which may mean, that in the generated editor, there is more wrong than I thought, e.g. that the editor tries to trigger the init annotation as well on opening a model which would be wrong.
And here the screencast: Recording__11