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

Bug 344605

Summary: NPE in MergeService.merge
Product: [Modeling] EMFCompare Reporter: Martin Domig <martin>
Component: CoreAssignee: EMF Compare <emf.compare-inbox>
Status: CLOSED WORKSFORME QA Contact:
Severity: major    
Priority: P3 CC: laurent.goubet
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
ecore file causing the NPE none

Description Martin Domig CLA 2011-05-03 12:19:17 EDT
Build Identifier: 20110218-0911

After adding an EInt attribute to a model, the following code fails with a NullPointerException:

MatchModel match = MatchService.doContentMatch(newSection, section, null);
DiffModel diff = DiffService.doDiff(match, false);
MergeService.merge(diff.getOwnedElements(), true);


Stacktrace:

java.lang.NullPointerException
	at org.eclipse.emf.compare.util.EFactory.eStructuralFeature(EFactory.java:287)
	at org.eclipse.emf.compare.util.EFactory.eGet(EFactory.java:156)
	at org.eclipse.emf.compare.diff.internal.merge.impl.UpdateAttributeMerger.undoInTarget(UpdateAttributeMerger.java:58)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
	at org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
	at org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)


Problem seems to be in UpdateAttributeMerger.undoInTarget:

final UpdateAttribute theDiff = (UpdateAttribute)this.diff;
...
final EObject origin = theDiff.getLeftElement();

origin is null here for some reason, and later dereferenced in EFactory.eGet().

Reproducible: Always

Steps to Reproduce:
Use the attached ecore model.
Create two identical section objects with a few groups and parameters.
Change one parameter in one of them.
Do the merge as described.
Comment 1 Martin Domig CLA 2011-05-03 12:23:45 EDT
Created attachment 194607 [details]
ecore file causing the NPE

ecore file describing the model. After adding the ParameterGroup/order attribute, things went south.
Comment 2 Martin Domig CLA 2011-05-03 12:25:28 EDT
Eclipse Version: Helios Service Release 2
EMF Compare SDK version: 1.1.2.v20110202-0936
Comment 3 Laurent Goubet CLA 2011-05-04 05:03:05 EDT
Martin,

This cannot be reproduced from the GUI, or at least not with the example models I've created using the provided metamodel.

Do you still have this issue when you use "MatchService.doResourceSetMatch(newSection.eResource().getResourceSet(), section.eResource().getResourceSet())" instead of "doContentMatch" ?

Could you create a small unit test that would allow us to reproduce the failure?
Comment 4 Laurent Goubet CLA 2011-06-15 10:17:20 EDT
Closing this bug as for now, will reopen if it can be reproduced.