Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java')
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java77
1 files changed, 22 insertions, 55 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java
index 851d36395..cdec275b8 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/AbstractMergeRunnable.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2014, 2015 Obeo.
+ * Copyright (c) 2014, 2017 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
@@ -10,19 +10,20 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions;
+import static org.eclipse.emf.compare.DifferenceState.DISCARDED;
+import static org.eclipse.emf.compare.DifferenceState.MERGED;
+import static org.eclipse.emf.compare.merge.AbstractMerger.isAccepting;
+import static org.eclipse.emf.compare.merge.AbstractMerger.isInTerminalState;
+
import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.Set;
import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.DifferenceState;
-import org.eclipse.emf.compare.internal.merge.IMergeData;
-import org.eclipse.emf.compare.internal.merge.MergeDataImpl;
import org.eclipse.emf.compare.internal.merge.MergeDependenciesUtil;
import org.eclipse.emf.compare.internal.merge.MergeMode;
import org.eclipse.emf.compare.merge.IMerger.Registry;
-import org.eclipse.emf.ecore.util.EcoreUtil;
/**
* Provides inheritable default behavior for the merge runnables.
@@ -99,60 +100,26 @@ public abstract class AbstractMergeRunnable {
*/
protected void markAsMerged(Diff diff, MergeMode mode, boolean mergeRightToLeft,
Registry mergerRegistry) {
- if (diff.getState() == DifferenceState.MERGED) {
+ if (isInTerminalState(diff)) {
return;
}
-
- final Set<Diff> implied = MergeDependenciesUtil.getAllResultingMerges(diff, mergerRegistry,
- mergeRightToLeft);
- final Set<Diff> rejections = MergeDependenciesUtil.getAllResultingRejections(diff, mergerRegistry,
- mergeRightToLeft);
- for (Diff impliedDiff : Sets.difference(implied, rejections)) {
- impliedDiff.setState(DifferenceState.MERGED);
- addOrUpdateMergeData(impliedDiff, mode);
- }
-
- for (Diff impliedRejection : rejections) {
- impliedRejection.setState(DifferenceState.MERGED);
- if (mergeMode == MergeMode.LEFT_TO_RIGHT || mergeMode == MergeMode.RIGHT_TO_LEFT) {
- addOrUpdateMergeData(impliedRejection, mode);
- } else {
- addOrUpdateMergeData(impliedRejection, mode.inverse());
+ if (isAccepting(diff, mergeRightToLeft)) {
+ final Set<Diff> implied = MergeDependenciesUtil.getAllResultingMerges(diff, mergerRegistry,
+ mergeRightToLeft);
+ final Set<Diff> rejections = MergeDependenciesUtil.getAllResultingRejections(diff, mergerRegistry,
+ mergeRightToLeft);
+ for (Diff impliedDiff : Sets.difference(implied, rejections)) {
+ impliedDiff.setState(MERGED);
+ }
+ for (Diff impliedRejection : rejections) {
+ impliedRejection.setState(DISCARDED);
}
- }
- }
-
- /**
- * Updates the IMergeData adapter for all of the given diffs.
- *
- * @param differences
- * The differences for which to set or update the IMergeData adapter.
- * @param mode
- * Merge mode we wish to keep track of.
- */
- protected void addOrUpdateMergeData(Collection<Diff> differences, MergeMode mode) {
- for (Diff difference : differences) {
- addOrUpdateMergeData(difference, mode);
- }
- }
-
- /**
- * Updates the IMergeData adapter for the given diff.
- *
- * @param diff
- * The difference for which to set or update the IMergeData adapter.
- * @param mode
- * Merge mode we wish to keep track of.
- */
- private void addOrUpdateMergeData(Diff diff, MergeMode mode) {
- IMergeData mergeData = (IMergeData)EcoreUtil.getExistingAdapter(diff, IMergeData.class);
- if (mergeData != null) {
- mergeData.setMergeMode(mode);
- mergeData.setLeftEditable(isLeftEditable);
- mergeData.setRightEditable(isRightEditable);
} else {
- mergeData = new MergeDataImpl(mode, isLeftEditable, isRightEditable);
- diff.eAdapters().add(mergeData);
+ final Set<Diff> implied = MergeDependenciesUtil.getAllResultingMerges(diff, mergerRegistry,
+ mergeRightToLeft);
+ for (Diff impliedDiff : implied) {
+ impliedDiff.setState(DISCARDED);
+ }
}
}
}

Back to the top