Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 360203

Summary: [EMF Compare UML] Update Reference difference for Stereotype attribute give an java.lang.IllegalArgumentException
Product: [Modeling] EMFCompare Reporter: Arthur Daussy <arthur.daussy>
Component: CoreAssignee: EMF Compare <emf.compare-inbox>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3 CC: cedric.brun
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
Model to reproduce the bug
none
Possible correction
none
Nicer possible correction none

Description Arthur Daussy CLA 2011-10-07 04:30:46 EDT
Created attachment 204732 [details]
Model to reproduce the bug

Hi,
 I'm currently using MDT Papyrus as modeller. And I get an error when handling stereotyped uml element. If the difference to see is an "UpdateReference" of a property of the stereotype. I get the following error:

java.lang.IllegalArgumentException: The feature 'Property0' is not a valid feature
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eOpenGet(BasicEObjectImpl.java:1072)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1025)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008)
	at org.eclipse.emf.compare.diff.provider.UpdateReferenceItemProvider.getLeftValue(UpdateReferenceItemProvider.java:177)
	at org.eclipse.emf.compare.diff.provider.UpdateReferenceItemProvider.getImage(UpdateReferenceItemProvider.java:68)
	at org.eclipse.emf.compare.uml2diff.provider.UMLStereotypeUpdateReferenceItemProvider.getImage(UMLStereotypeUpdateReferenceItemProvider.java:158)
	at org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider.getImage(AdapterFactoryLabelProvider.java:336)
	at org.eclipse.emf.compare.ui.viewer.structure.ModelStructureMergeViewer$ModelStructureLabelProvider.getImage(ModelStructureMergeViewer.java:441)
	at org.eclipse.jface.viewers.WrappedViewerLabelProvider.getImage(WrappedViewerLabelProvider.java:117)
	at org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:165)
	at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:152)
	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:938)
	at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:106)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1018)
	at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:485)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2167)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:833)
	at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:808)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:782)
	at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:644)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:753)
	at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:1485)
	at org.eclipse.jface.viewers.TreeViewer.handleTreeExpand(TreeViewer.java:952)
	at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:1496)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:132)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
	at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:7538)
	at org.eclipse.swt.widgets.Control.wmNotify(Control.java:5534)
	at org.eclipse.swt.widgets.Composite.wmNotify(Composite.java:1896)
	at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:5086)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4584)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
	at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2424)
	at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1533)
	at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:6411)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4564)
	at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:5937)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4985)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2530)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)

I will put my models as attachment.
Comment 1 Arthur Daussy CLA 2011-10-07 04:39:49 EDT
Created attachment 204733 [details]
Possible correction

I think this patch might correct this bug but I may also missed to impact problem
Comment 2 Arthur Daussy CLA 2011-10-07 04:41:33 EDT
An other solution would may be to change the 
org.eclipse.emf.compare.uml2diff.provider.UMLStereotypeUpdateReferenceItemProvider.getImage(Object) implementation.
Comment 3 Arthur Daussy CLA 2011-10-07 05:22:11 EDT
Created attachment 204737 [details]
Nicer possible correction

This might be a nicer correction
Comment 4 Cedric Brun CLA 2011-10-11 05:54:32 EDT
I reproduced the bug with the models you gave us. I'll look into your patch.
Comment 5 Cedric Brun CLA 2011-10-11 07:25:22 EDT
As the UMLDiff Extension extends the generic diff, I would expect this specific code to handle the stereotype references to be in the specialized umldiff.edit and not the generic one.

I did the change in commit eefaf5e570f20c2b5ec1b6304b0d84c195b7023d. You'll get the fix in the next 1.3 build.

We need a testcase to make sure other issues like this on getText/getImage won't happen on some comparison cases, it sounds pretty easy to setup, just diffing models and calling the adapter factory on each diff, then building an UML model adding elements and changes so that we get a proper code coverage.

I'll track another bug for that.
Comment 6 Laurent Goubet CLA 2013-01-17 08:32:25 EST
batch-closing a bunch of "RESOLVED" bugs.