Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 365628 - [EMF Compare] ReferenceOrderChangeMerger creates invalid values
Summary: [EMF Compare] ReferenceOrderChangeMerger creates invalid values
Status: CLOSED FIXED
Alias: None
Product: EMFCompare
Classification: Modeling
Component: Core (show other bugs)
Version: 1.3   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: EMF Compare CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-12-05 11:27 EST by Alex Lagarde CLA
Modified: 2013-01-17 08:32 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alex Lagarde CLA 2011-12-05 11:27:28 EST
When merging changes, the org.eclipse.emf.compare.diff.internal.merge.impl.ReferenceOrderChangeMerger computes the new value to set (which is a collection) using Google collections (in the doUndoInTarget() and doApplyInOrigin() methods).

But when calling EFactory.eSet with this value, this may cause a class cast exception, as if the DelegatingEcoreEList.set(Object newValue) method is called, it casts the new value as a list (although the ReferenceORderChangeMerger created a com.google.common.collect.Collections2$FilteredCollection).

Issue can be easilly resolved by creating a list out of the filtered collection (for example with Lists.newArrayList(Collections2.filter(...)).

Caused by: java.lang.ClassCastException: com.google.common.collect.Collections2$FilteredCollection cannot be cast to java.util.List
	at org.eclipse.emf.ecore.util.DelegatingEcoreEList.set(DelegatingEcoreEList.java:564)
	at org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateMany.dynamicSet(EStructuralFeatureImpl.java:1734)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicSet(BasicEObjectImpl.java:1137)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjectImpl.java:1111)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjectImpl.java:1081)
	at org.eclipse.emf.compare.util.EFactory.eSet(EFactory.java:335)
	at org.eclipse.emf.compare.diff.internal.merge.impl.ReferenceOrderChangeMerger.doUndoInTarget(ReferenceOrderChangeMerger.java:76)
	at org.eclipse.emf.compare.diff.merge.DefaultMerger.undoInTarget(DefaultMerger.java:174)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:176)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:140)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:47)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:176)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:140)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:47)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:176)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:140)
Comment 1 Cedric Brun CLA 2011-12-12 05:08:26 EST
Fixed in commit c308a0e015525ed83903914dafb6a0b1c50f544d
Comment 2 Laurent Goubet CLA 2013-01-17 08:32:09 EST
batch-closing a bunch of "RESOLVED" bugs.