Community
Participate
Working Groups
I get the following NPE when merging a branch. It fails on a Ecore model with Sirius representation, that do exist in the local branch but do not exist in the branch that is merged in. This leaves the whole workspace in a doubtful state, it seems that only part of the branch is merged. java.lang.NullPointerException at org.eclipse.emf.compare.diff.DefaultDiffEngine.createContainmentDifferencesNoOrdering(DefaultDiffEngine.java:470) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeContainmentDifferences(DefaultDiffEngine.java:324) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeDifferences(DefaultDiffEngine.java:757) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:180) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.checkForDifferences(DefaultDiffEngine.java:156) at org.eclipse.emf.compare.diff.DefaultDiffEngine.diff(DefaultDiffEngine.java:129) at org.eclipse.emf.compare.EMFCompare.compare(EMFCompare.java:240) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.mergeMapping(EMFResourceMappingMerger.java:266) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.merge(EMFResourceMappingMerger.java:143) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.run(RecursiveModelMerger.java:441) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.access$1(RecursiveModelMerger.java:436) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTreeWalk(RecursiveModelMerger.java:249) at org.eclipse.jgit.merge.ResolveMerger.mergeTrees(ResolveMerger.java:1282) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTrees(RecursiveModelMerger.java:135) at org.eclipse.jgit.merge.ResolveMerger.mergeImpl(ResolveMerger.java:390) at org.eclipse.jgit.merge.Merger.merge(Merger.java:266) at org.eclipse.jgit.merge.Merger.merge(Merger.java:219) at org.eclipse.jgit.merge.ThreeWayMerger.merge(ThreeWayMerger.java:129) at org.eclipse.jgit.api.MergeCommand.call(MergeCommand.java:359) at org.eclipse.egit.core.op.MergeOperation$1.run(MergeOperation.java:195) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317) at org.eclipse.egit.core.op.MergeOperation.execute(MergeOperation.java:224) at org.eclipse.egit.core.internal.job.JobUtil$2.runInWorkspace(JobUtil.java:107) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
This is something that we haven't reproduced on our side. Looks like this is happening during two-way comparisons? Are you comparing two local files together?
(In reply to Laurent Goubet from comment #1) > This is something that we haven't reproduced on our side. Looks like this is > happening during two-way comparisons? Are you comparing two local files > together? No, this happens while doing a git merge, completely automatically. I have a branch in which new EMF models are created (including Sirius representation). Then I try to merge in the (master) branch that does not contain the new models. I see 'starting merge operations' for all models in both branches, that succeed. Only for this model the NPE occurs. Snippet from the log follows. !ENTRY org.eclipse.emf.compare.ide.ui 0 0 2020-02-03 10:07:59.844 !MESSAGE Starting model merge operation with 3 model resource(s). !SUBENTRY 1 org.eclipse.emf.compare.ide.ui 0 0 2020-02-03 10:07:59.844 !MESSAGE \example.com\model\model.aird !SUBENTRY 1 org.eclipse.emf.compare.ide.ui 0 0 2020-02-03 10:07:59.844 !MESSAGE \example.com\model\model.ecore !SUBENTRY 1 org.eclipse.emf.compare.ide.ui 0 0 2020-02-03 10:07:59.844 !MESSAGE \example.\model\model.genmodel !ENTRY org.eclipse.egit.ui 4 0 2020-02-03 10:07:59.946 !MESSAGE An internal error occurred during: "Merging with refs/remotes/origin/master". !STACK 0 java.lang.NullPointerException at org.eclipse.emf.compare.diff.DefaultDiffEngine.createContainmentDifferencesNoOrdering(DefaultDiffEngine.java:470) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeContainmentDifferences(DefaultDiffEngine.java:324) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeDifferences(DefaultDiffEngine.java:757) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:180) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.checkForDifferences(DefaultDiffEngine.java:156) at org.eclipse.emf.compare.diff.DefaultDiffEngine.diff(DefaultDiffEngine.java:129) at org.eclipse.emf.compare.EMFCompare.compare(EMFCompare.java:240) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.mergeMapping(EMFResourceMappingMerger.java:266) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.merge(EMFResourceMappingMerger.java:143) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.run(RecursiveModelMerger.java:441) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.access$1(RecursiveModelMerger.java:436) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTreeWalk(RecursiveModelMerger.java:249) at org.eclipse.jgit.merge.ResolveMerger.mergeTrees(ResolveMerger.java:1282) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTrees(RecursiveModelMerger.java:135) at org.eclipse.jgit.merge.ResolveMerger.mergeImpl(ResolveMerger.java:390) at org.eclipse.jgit.merge.Merger.merge(Merger.java:266) at org.eclipse.jgit.merge.Merger.merge(Merger.java:219) at org.eclipse.jgit.merge.ThreeWayMerger.merge(ThreeWayMerger.java:129) at org.eclipse.jgit.api.MergeCommand.call(MergeCommand.java:359) at org.eclipse.egit.core.op.MergeOperation$1.run(MergeOperation.java:195) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317) at org.eclipse.egit.core.op.MergeOperation.execute(MergeOperation.java:224) at org.eclipse.egit.core.internal.job.JobUtil$2.runInWorkspace(JobUtil.java:107) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) !ENTRY org.eclipse.core.jobs 4 2 2020-02-03 10:07:59.948 !MESSAGE An internal error occurred during: "Merging with refs/remotes/origin/master". !STACK 0 java.lang.NullPointerException at org.eclipse.emf.compare.diff.DefaultDiffEngine.createContainmentDifferencesNoOrdering(DefaultDiffEngine.java:470) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeContainmentDifferences(DefaultDiffEngine.java:324) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeDifferences(DefaultDiffEngine.java:757) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:180) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.checkForDifferences(DefaultDiffEngine.java:156) at org.eclipse.emf.compare.diff.DefaultDiffEngine.diff(DefaultDiffEngine.java:129) at org.eclipse.emf.compare.EMFCompare.compare(EMFCompare.java:240) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.mergeMapping(EMFResourceMappingMerger.java:266) at org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger.merge(EMFResourceMappingMerger.java:143) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.run(RecursiveModelMerger.java:441) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger$ModelMerge.access$1(RecursiveModelMerger.java:436) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTreeWalk(RecursiveModelMerger.java:249) at org.eclipse.jgit.merge.ResolveMerger.mergeTrees(ResolveMerger.java:1282) at org.eclipse.emf.compare.egit.internal.merge.RecursiveModelMerger.mergeTrees(RecursiveModelMerger.java:135) at org.eclipse.jgit.merge.ResolveMerger.mergeImpl(ResolveMerger.java:390) at org.eclipse.jgit.merge.Merger.merge(Merger.java:266) at org.eclipse.jgit.merge.Merger.merge(Merger.java:219) at org.eclipse.jgit.merge.ThreeWayMerger.merge(ThreeWayMerger.java:129) at org.eclipse.jgit.api.MergeCommand.call(MergeCommand.java:359) at org.eclipse.egit.core.op.MergeOperation$1.run(MergeOperation.java:195) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317) at org.eclipse.egit.core.op.MergeOperation.execute(MergeOperation.java:224) at org.eclipse.egit.core.internal.job.JobUtil$2.runInWorkspace(JobUtil.java:107) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
This is strange, the line this NPE originates from shouldn't be called during three way comparisons at all. Which version of EMF Compare are you using?
(In reply to Laurent Goubet from comment #3) > This is strange, the line this NPE originates from shouldn't be called > during three way comparisons at all. Which version of EMF Compare are you > using? EMF Compare Core 3.5.3.201911051515
Rolf, I don't understand why we're getting to this particular line of code. I cannot reproduce on my side since I'm only going through "fast-forward" EGit merges when I try to execute the steps you're describing here (creating models in another branch then merging that branch into master). Any way you could provide us with the example repository you're using to test?
Created attachment 281679 [details] Ecore model which cause the NPE In my installation this Ecore model causes the NPE. It is also triggered when comparing this model to any other ecore model. When the eTypeParameter is removed from the children attribute, the compare does not throw an NPE. Trace from comparing models: java.lang.NullPointerException at org.eclipse.emf.compare.diff.DefaultDiffEngine.createContainmentDifferencesNoOrdering(DefaultDiffEngine.java:470) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeContainmentDifferences(DefaultDiffEngine.java:324) at org.eclipse.emf.compare.diff.DefaultDiffEngine.computeDifferences(DefaultDiffEngine.java:757) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:180) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.internalCheckForDifferences(DefaultDiffEngine.java:191) at org.eclipse.emf.compare.diff.DefaultDiffEngine.checkForDifferences(DefaultDiffEngine.java:156) at org.eclipse.emf.compare.diff.DefaultDiffEngine.diff(DefaultDiffEngine.java:129) at org.eclipse.emf.compare.EMFCompare.compare(EMFCompare.java:240) at org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.EMFCompareStructureMergeViewer.compareInputChanged(EMFCompareStructureMergeViewer.java:1599) at org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.EMFCompareStructureMergeViewer$CompareInputChangedJob.run(EMFCompareStructureMergeViewer.java:224) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Alright, EGenericTypes are objects handled in special ways by EMF so we have exceptions in EMF Compare to try and avoid these corner cases. It seems like EGenericTypes with type arguments are not correctly handled. Here, apparently, the parameter has not been matched so diff detection cannot work.