diff options
author | Mikaël Barbero | 2013-09-30 15:44:31 +0000 |
---|---|---|
committer | Mikaël Barbero | 2013-10-01 08:20:22 +0000 |
commit | 90abb11fce4f4ab47b692c66b689ae764db364a1 (patch) | |
tree | 4025fe42ad6c1b784b8931179b75d409db4b46bf | |
parent | 3c1e711f7f7683fab6d21dec561110d29226190a (diff) | |
download | org.eclipse.emf.compare-90abb11fce4f4ab47b692c66b689ae764db364a1.tar.gz org.eclipse.emf.compare-90abb11fce4f4ab47b692c66b689ae764db364a1.tar.xz org.eclipse.emf.compare-90abb11fce4f4ab47b692c66b689ae764db364a1.zip |
Add cross referencer to TreeNode.data to retrieve TreeNode from EObject
The cross referencer is specific to each group provider because each
create their own TreeNodes. It let us retrieve the proper TreeNode from
the command stack listener to update the selection in the tree without
re-creating a new TreeNode.
Change-Id: I5a886a180bd2a1d9bc744d25c11931433e447112
8 files changed, 142 insertions, 35 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java index f981a4b5d..e5e2bca83 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java @@ -36,6 +36,8 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.command.CommandStack; import org.eclipse.emf.common.command.CommandStackListener; +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.ui.dialogs.DiagnosticDialog; import org.eclipse.emf.common.util.BasicMonitor; import org.eclipse.emf.common.util.Diagnostic; @@ -66,6 +68,7 @@ import org.eclipse.emf.compare.scope.IComparisonScope; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.IDisposable; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; @@ -318,14 +321,20 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem // org.eclipse.compare.CompareEditorInput#getElement(ISelection)) Object first = getFirst(affectedObjects, null); if (first instanceof EObject) { - TreeNode treeNode = TreeFactory.eINSTANCE.createTreeNode(); - treeNode.setData((EObject)first); - final Object adaptedAffectedObject = fAdapterFactory.adapt(treeNode, ICompareInput.class); - SWTUtil.safeAsyncExec(new Runnable() { - public void run() { - setSelectionToWidget(new StructuredSelection(adaptedAffectedObject), true); - } - }); + Notifier notifier = ((Adapter)diffTreeViewer.getRoot()).getTarget(); + IDifferenceGroupProvider groupProvider = (IDifferenceGroupProvider)EcoreUtil + .getExistingAdapter(notifier, IDifferenceGroupProvider.class); + Iterable<TreeNode> treeNodes = groupProvider.getTreeNodes((EObject)first); + TreeNode treeNode = getFirst(treeNodes, null); + if (treeNode != null) { + final Object adaptedAffectedObject = fAdapterFactory.adapt(treeNode, + ICompareInput.class); + SWTUtil.safeAsyncExec(new Runnable() { + public void run() { + setSelection(new StructuredSelection(adaptedAffectedObject), true); + } + }); + } } } } else { diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/BasicDifferenceGroupImpl.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/BasicDifferenceGroupImpl.java index 9006e6ac9..ef61b7446 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/BasicDifferenceGroupImpl.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/BasicDifferenceGroupImpl.java @@ -52,6 +52,7 @@ import org.eclipse.emf.compare.provider.utils.IStyledString.Style; import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.extender.IDifferenceGroupExtender; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; import org.eclipse.emf.edit.tree.TreeFactory; import org.eclipse.emf.edit.tree.TreeNode; import org.eclipse.swt.graphics.Image; @@ -89,6 +90,9 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference private final IDifferenceGroupExtender.Registry registry = EMFCompareRCPUIPlugin.getDefault() .getDifferenceGroupExtenderRegistry(); + /** The cross reference adapter that will be added to this group's children. */ + private final ECrossReferenceAdapter crossReferenceAdapter; + /** * Instantiates this group given the comparison and filter that should be used in order to determine its * list of differences. @@ -102,9 +106,13 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference * The whole unfiltered list of differences. * @param filter * The filter we'll use in order to filter the differences that are part of this group. + * @param crossReferenceAdapter + * The cross reference adapter that will be added to this group's children. */ - public BasicDifferenceGroupImpl(Comparison comparison, Predicate<? super Diff> filter) { - this(comparison, filter, "Group", EMFCompareRCPUIPlugin.getImage("icons/full/toolb16/group.gif")); //$NON-NLS-1$//$NON-NLS-2$ + public BasicDifferenceGroupImpl(Comparison comparison, Predicate<? super Diff> filter, + ECrossReferenceAdapter crossReferenceAdapter) { + this(comparison, filter, "Group", EMFCompareRCPUIPlugin.getImage("icons/full/toolb16/group.gif"), //$NON-NLS-2$ + crossReferenceAdapter); } /** @@ -119,9 +127,13 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference * The filter we'll use in order to filter the differences that are part of this group. * @param name * The name that the EMF Compare UI will display for this group. + * @param crossReferenceAdapter + * The cross reference adapter that will be added to this group's children. */ - public BasicDifferenceGroupImpl(Comparison comparison, Predicate<? super Diff> filter, String name) { - this(comparison, filter, name, EMFCompareRCPUIPlugin.getImage("icons/full/toolb16/group.gif")); //$NON-NLS-1$ + public BasicDifferenceGroupImpl(Comparison comparison, Predicate<? super Diff> filter, String name, + ECrossReferenceAdapter crossReferenceAdapter) { + this(comparison, filter, name, + EMFCompareRCPUIPlugin.getImage("icons/full/toolb16/group.gif"), crossReferenceAdapter); //$NON-NLS-1$ } /** @@ -138,13 +150,16 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference * The name that the EMF Compare UI will display for this group. * @param image * The icon that the EMF Compare UI will display for this group. + * @param crossReferenceAdapter + * The cross reference adapter that will be added to this group's children. */ public BasicDifferenceGroupImpl(Comparison comparison, Predicate<? super Diff> filter, String name, - Image image) { + Image image, ECrossReferenceAdapter crossReferenceAdapter) { this.comparison = comparison; this.filter = filter; this.name = name; this.image = image; + this.crossReferenceAdapter = crossReferenceAdapter; } /** @@ -232,6 +247,10 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference children.add(buildSubTree); } } + for (TreeNode child : children) { + // this cross referencer has to live as long as the objects on which it is installed. + child.eAdapters().add(crossReferenceAdapter); + } } return children; } diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/IDifferenceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/IDifferenceGroupProvider.java index b8fbac32e..2cebc868f 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/IDifferenceGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/IDifferenceGroupProvider.java @@ -15,6 +15,8 @@ import java.util.Collection; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.scope.IComparisonScope; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.edit.tree.TreeNode; /** * Instances of this class will be used by EMF Compare in order to provide difference grouping facilities to @@ -122,4 +124,10 @@ public interface IDifferenceGroupProvider extends Adapter { void clear(); } + /** + * @param first + * @return + */ + Iterable<TreeNode> getTreeNodes(EObject eObject); + } diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/AbstractDifferenceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/AbstractDifferenceGroupProvider.java new file mode 100644 index 000000000..165a42ed7 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/AbstractDifferenceGroupProvider.java @@ -0,0 +1,72 @@ +/*******************************************************************************
+ * Copyright (c) 2013 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl;
+
+import static com.google.common.collect.Lists.newArrayListWithCapacity;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.emf.edit.tree.TreePackage;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public abstract class AbstractDifferenceGroupProvider extends AdapterImpl implements IDifferenceGroupProvider {
+
+ private final ECrossReferenceAdapter crossReferenceAdapter;
+
+ /**
+ *
+ */
+ public AbstractDifferenceGroupProvider() {
+ crossReferenceAdapter = new ECrossReferenceAdapter() {
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.ecore.util.ECrossReferenceAdapter#isIncluded(org.eclipse.emf.ecore.EReference)
+ */
+ @Override
+ protected boolean isIncluded(EReference eReference) {
+ return eReference == TreePackage.Literals.TREE_NODE__DATA;
+ }
+ };
+ }
+
+ /**
+ * @return the crossReferenceAdapter
+ */
+ public ECrossReferenceAdapter getCrossReferenceAdapter() {
+ return crossReferenceAdapter;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider#getTreeNodes(java.lang.Object)
+ */
+ public List<TreeNode> getTreeNodes(EObject eObject) {
+ Collection<Setting> inverseReferences = crossReferenceAdapter
+ .getNonNavigableInverseReferences(eObject);
+ List<TreeNode> ret = newArrayListWithCapacity(inverseReferences.size());
+ for (Setting setting : inverseReferences) {
+ ret.add((TreeNode)setting.getEObject());
+ }
+ return ret;
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java index d48e899fa..ef30e2f38 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java @@ -15,8 +15,8 @@ import static com.google.common.base.Predicates.not; import static com.google.common.base.Predicates.or; import static com.google.common.collect.Collections2.filter; import static com.google.common.collect.Lists.newArrayList; -import static org.eclipse.emf.compare.utils.EMFComparePredicates.containmentReferenceChange; import static org.eclipse.emf.compare.utils.EMFComparePredicates.containmentMoveReferenceChange; +import static org.eclipse.emf.compare.utils.EMFComparePredicates.containmentReferenceChange; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; @@ -25,7 +25,6 @@ import com.google.common.collect.Lists; import java.util.Collection; import java.util.List; -import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.Match; @@ -35,6 +34,7 @@ import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.Basic import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroup; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider; import org.eclipse.emf.compare.scope.IComparisonScope; +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; import org.eclipse.emf.edit.tree.TreeNode; /** @@ -44,7 +44,7 @@ import org.eclipse.emf.edit.tree.TreeNode; * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a> * @since 3.0 */ -public class ByResourceGroupProvider extends AdapterImpl implements IDifferenceGroupProvider { +public class ByResourceGroupProvider extends AbstractDifferenceGroupProvider implements IDifferenceGroupProvider { /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */ private String label; @@ -76,7 +76,7 @@ public class ByResourceGroupProvider extends AdapterImpl implements IDifferenceG public Collection<? extends IDifferenceGroup> getGroups(Comparison comparison) { if (group == null || !comparison.equals(comp)) { this.comp = comparison; - group = new ResourceGroup(comparison); + group = new ResourceGroup(comparison, getCrossReferenceAdapter()); } return ImmutableList.of(group); } @@ -139,8 +139,8 @@ public class ByResourceGroupProvider extends AdapterImpl implements IDifferenceG * * @see org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.BasicDifferenceGroupImpl#BasicDifferenceGroupImpl(org.eclipse.emf.compare.Comparison) */ - public ResourceGroup(Comparison comparison) { - super(comparison, Predicates.<Diff> alwaysTrue()); + public ResourceGroup(Comparison comparison, ECrossReferenceAdapter crossReferenceAdapter) { + super(comparison, Predicates.<Diff> alwaysTrue(), crossReferenceAdapter); } /** diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java index daad205ae..c4ffbe4f3 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/DefaultGroupProvider.java @@ -16,7 +16,6 @@ import com.google.common.collect.ImmutableList; import java.util.Collection; -import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.BasicDifferenceGroupImpl; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroup; @@ -29,7 +28,7 @@ import org.eclipse.emf.compare.scope.IComparisonScope; * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a> * @since 3.0 */ -public class DefaultGroupProvider extends AdapterImpl implements IDifferenceGroupProvider { +public class DefaultGroupProvider extends AbstractDifferenceGroupProvider implements IDifferenceGroupProvider { /** The unique group provided by this provider. */ private IDifferenceGroup group; @@ -45,7 +44,7 @@ public class DefaultGroupProvider extends AdapterImpl implements IDifferenceGrou public Collection<? extends IDifferenceGroup> getGroups(Comparison comparison) { if (group == null || !comparison.equals(comp)) { this.comp = comparison; - group = new BasicDifferenceGroupImpl(comparison, alwaysTrue()); + group = new BasicDifferenceGroupImpl(comparison, alwaysTrue(), getCrossReferenceAdapter()); } return ImmutableList.of(group); } diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java index d91c8ec45..15d82b16b 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/KindGroupProvider.java @@ -17,7 +17,6 @@ import com.google.common.collect.Lists; import java.util.Collection; -import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.DifferenceKind; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.BasicDifferenceGroupImpl; @@ -32,7 +31,7 @@ import org.eclipse.emf.compare.scope.IComparisonScope; * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> * @since 3.0 */ -public class KindGroupProvider extends AdapterImpl implements IDifferenceGroupProvider { +public class KindGroupProvider extends AbstractDifferenceGroupProvider implements IDifferenceGroupProvider { /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */ private String label; @@ -65,13 +64,13 @@ public class KindGroupProvider extends AdapterImpl implements IDifferenceGroupPr if (differenceGroups == null || !comparison.equals(comp)) { this.comp = comparison; final IDifferenceGroup additions = new BasicDifferenceGroupImpl(comparison, - ofKind(DifferenceKind.ADD), "Additions"); + ofKind(DifferenceKind.ADD), "Additions", getCrossReferenceAdapter()); final IDifferenceGroup deletions = new BasicDifferenceGroupImpl(comparison, - ofKind(DifferenceKind.DELETE), "Deletions"); + ofKind(DifferenceKind.DELETE), "Deletions", getCrossReferenceAdapter()); final IDifferenceGroup changes = new BasicDifferenceGroupImpl(comparison, - ofKind(DifferenceKind.CHANGE), "Changes"); + ofKind(DifferenceKind.CHANGE), "Changes", getCrossReferenceAdapter()); final IDifferenceGroup moves = new BasicDifferenceGroupImpl(comparison, - ofKind(DifferenceKind.MOVE), "Moves"); + ofKind(DifferenceKind.MOVE), "Moves", getCrossReferenceAdapter()); Collection<IDifferenceGroup> groups = Lists.newArrayList(); if (!additions.getGroupTree().isEmpty()) { groups.add(additions); diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java index e3f2882c5..bf5f9a28f 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java @@ -31,7 +31,6 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Conflict; import org.eclipse.emf.compare.ConflictKind; @@ -49,6 +48,7 @@ import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDiff import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider; import org.eclipse.emf.compare.scope.IComparisonScope; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; import org.eclipse.emf.edit.tree.TreeNode; /** @@ -58,7 +58,7 @@ import org.eclipse.emf.edit.tree.TreeNode; * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a> * @since 3.0 */ -public class ThreeWayComparisonGroupProvider extends AdapterImpl implements IDifferenceGroupProvider { +public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProvider implements IDifferenceGroupProvider { /** A human-readable label for this group provider. This will be displayed in the EMF Compare UI. */ private String label; @@ -91,13 +91,13 @@ public class ThreeWayComparisonGroupProvider extends AdapterImpl implements IDif if (differenceGroups == null || !comparison.equals(comp)) { this.comp = comparison; final IDifferenceGroup conflicts = new ConflictsGroupImpl(comparison, hasConflict( - ConflictKind.REAL, ConflictKind.PSEUDO), "Conflicts"); + ConflictKind.REAL, ConflictKind.PSEUDO), "Conflicts", getCrossReferenceAdapter()); final IDifferenceGroup leftSide = new BasicDifferenceGroupImpl(comparison, Predicates.and( fromSide(DifferenceSource.LEFT), Predicates.not(hasConflict(ConflictKind.REAL, - ConflictKind.PSEUDO))), "Left side"); + ConflictKind.PSEUDO))), "Left side", getCrossReferenceAdapter()); final IDifferenceGroup rightSide = new BasicDifferenceGroupImpl(comparison, Predicates.and( fromSide(DifferenceSource.RIGHT), Predicates.not(hasConflict(ConflictKind.REAL, - ConflictKind.PSEUDO))), "Right side"); + ConflictKind.PSEUDO))), "Right side", getCrossReferenceAdapter()); differenceGroups = ImmutableList.of(conflicts, leftSide, rightSide); } @@ -166,8 +166,9 @@ public class ThreeWayComparisonGroupProvider extends AdapterImpl implements IDif * @see org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.BasicDifferenceGroupImpl#BasicDifferenceGroupImpl(org.eclipse.emf.compare.Comparison, * java.lang.Iterable, com.google.common.base.Predicate, java.lang.String) */ - public ConflictsGroupImpl(Comparison comparison, Predicate<? super Diff> filter, String name) { - super(comparison, filter, name); + public ConflictsGroupImpl(Comparison comparison, Predicate<? super Diff> filter, String name, + ECrossReferenceAdapter crossReferenceAdapter) { + super(comparison, filter, name, crossReferenceAdapter); } /** |