EMF Compare crashing when instantiating multiple times in a modal [message #1866012] |
Fri, 17 May 2024 11:23 |
Eclipse User |
|
|
|
Hi,
While trying to put multiple instances of EMF Compare into a refactoring wizard (rendering
multiple instances of EMF Compare within one context), the first instance of EMF Compare is
instantiated and drawn by the IDE correctly, but subsequent instantiations of EMF Compare
within the same wizard modal / context fail to render with multiple exceptions.
The exception messages always contain references to conflicting action handlers:
java.lang.IllegalStateException: Conflicting handlers:
{[ActionHandler(org.eclipse.compare.contentmergeviewer.ContentMergeViewer$3@344520ce), for
'org.eclipse.compare.copyAllLeftToRight', in WorkbenchContext, activeWhen=ActiveShellExpression(Shell
{Rename Resource} [layout=GridLayout {numColumns=5 verticalSpacing=5}]), active=true,
sourcePriority=17408, participating=true]} vs
{[ActionHandler(org.eclipse.compare.contentmergeviewer.ContentMergeViewer$3@35f15782), for
'org.eclipse.compare.copyAllLeftToRight', in WorkbenchContext, activeWhen=ActiveShellExpression(Shell
{Rename Resource} [layout=GridLayout {numColumns=5 verticalSpacing=5}]), active=true,
sourcePriority=17408, participating=true]} in: org.eclipse.ui.contexts.dialog
at
org.eclipse.ui.internal.handlers.LegacyHandlerService$HandlerSelectionFunction.compute(LegacyHandlerSe
rvice.java:145)
at org.eclipse.e4.core.internal.contexts.ValueComputation.get(ValueComputation.java:70)
at org.eclipse.e4.core.internal.contexts.EclipseContext.internalGet(EclipseContext.java:265)
at org.eclipse.e4.core.internal.contexts.EclipseContext.internalGet(EclipseContext.java:276)
at org.eclipse.e4.core.internal.contexts.EclipseContext.get(EclipseContext.java:230)
at
org.eclipse.e4.core.commands.internal.HandlerServiceImpl.lookUpHandler(HandlerServiceImpl.java:103)
at org.eclipse.ui.internal.handlers.E4HandlerProxy.handlerChanged(E4HandlerProxy.java:116)
at org.eclipse.core.commands.AbstractHandler.fireHandlerChanged(AbstractHandler.java:77)
at org.eclipse.jface.commands.ActionHandler.lambda$0(ActionHandler.java:81)
at org.eclipse.jface.action.AbstractAction.firePropertyChange(AbstractAction.java:52)
at org.eclipse.jface.action.AbstractAction.firePropertyChange(AbstractAction.java:75)
at org.eclipse.jface.action.Action.setEnabled(Action.java:541)
at
org.eclipse.compare.contentmergeviewer.ContentMergeViewer.updateToolItems(ContentMergeViewer.java:1099
)
at
org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.EMFCompareContentMergeViewer.createToolItem
s(EMFCompareContentMergeViewer.java:427)
at
org.eclipse.compare.contentmergeviewer.ContentMergeViewer.initializeToolbars(ContentMergeViewer.java:9
50)
at
org.eclipse.compare.contentmergeviewer.ContentMergeViewer.buildControl(ContentMergeViewer.java:873)
at
org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.table.TableContentMergeViewer.<init>(TableC
ontentMergeViewer.java:98)
at
org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.table.TableContentMergeViewerCreator.create
Viewer(TableContentMergeViewerCreator.java:37)
at org.eclipse.compare.internal.ViewerDescriptor.createViewer(ViewerDescriptor.java:66)
at org.eclipse.compare.internal.CompareUIPlugin.getViewer(CompareUIPlugin.java:1107)
at org.eclipse.compare.internal.CompareUIPlugin.findContentViewer(CompareUIPlugin.java:1102)
at org.eclipse.compare.CompareUI.findContentViewer(CompareUI.java:338)
at org.eclipse.compare.CompareEditorInput.findContentViewer(CompareEditorInput.java:916)
at
org.eclipse.compare.internal.CompareContentViewerSwitchingPane.getViewer(CompareContentViewerSwitching
Pane.java:99)
at
org.eclipse.compare.CompareViewerSwitchingPane.setInput(CompareViewerSwitchingPane.java:257)
at
org.eclipse.compare.internal.CompareContentViewerSwitchingPane.setInput(CompareContentViewerSwitchingP
ane.java:202)
at
org.eclipse.compare.CompareEditorInput.internalSetContentPaneInput(CompareEditorInput.java:806)
at org.eclipse.compare.CompareEditorInput.lambda$8(CompareEditorInput.java:754)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.compare.CompareEditorInput.feed1(CompareEditorInput.java:742)
at org.eclipse.compare.CompareEditorInput.lambda$4(CompareEditorInput.java:640)
at org.eclipse.compare.CompareViewerPane.open(CompareViewerPane.java:312)
at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:800)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:797)
at
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractStructuredViewerWrapper.access$6(
AbstractStructuredViewerWrapper.java:1)
at
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractStructuredViewerWrapper$5.open(Ab
stractStructuredViewerWrapper.java:144)
at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:800)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:797)
at
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.WrappableTreeViewer.fireOpen(WrappableTre
eViewer.java:868)
at
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.Navigatable.fireOpen(Navigatable.java:126
)
at
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.Navigatable$1.run(Navigatable.java:70)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4046)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3662)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
at org.eclipse.jface.window.Window.open(Window.java:799)
at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.lambda$0(RefactoringWizardOpenOperation.
java:190)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:
209)
at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:
126)
at
org.eclipse.ltk.internal.ui.refactoring.actions.RenameResourceHandler.performRename(RenameResourceHand
ler.java:106)
at
org.eclipse.ltk.internal.ui.refactoring.actions.RenameResourceHandler.execute(RenameResourceHandler.ja
va:58)
This issue can be reproduced using a draft PR of the 4diac IDE: https://github.com/TerraBAS/4diac-ide/tree/feature/RefactorEMFCompare .
The specific implementation code causing the problem can be found here: https://github.com/TerraBAS/4diac-ide/blob/feature/RefactorEMFCompare/plugins/org.eclipse.fordiac.ide.typemanagement/src/org/eclipse/fordiac/ide/typemanagement/previews/StructChangePreviewViewer.java
Some investigation on my part yielded the following suggestion on how to fix this:
This issue occurs because the ContentMergerViewer
(org.eclipse.compare.contentmergeviewer.ContentMergeViewer.initializeToolbars(), line 894)
registers 3 toolbar actions "org.eclipse.compare.copyAllLeftToRight",
"org.eclipse.compare.copyAllRightToLeft" and "org.eclipse.compare.switchLeftAndRight"
workspace-wide, which have already been registered by a previous instance of EMFCompare,
which did not unregister these actions in time before the new EMFCompare instance was
rendered. These toolbar items are registered even if they are disabled using the
EMFCompareConfiguration (setLeftEditable(false), setRightEditable(false)).
EMFCompare / Compare should be updated to not register the full toolbar when these controls
are disabled in the config or EMFCompare / Compare should handle unregistering / registering
for cases where multiple instances within one workspace are rendered at the same time.
Maybe there is also a temporary workaround for how to get this working until the underlying issue has been addressed?
Many thanks,
Martin
|
|
|
Powered by
FUDForum. Page generated in 0.05756 seconds