Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java')
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java
new file mode 100644
index 000000000..1fa0f3a79
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.compare.internal.patch;
+
+import org.eclipse.compare.ITypedElement;
+import org.eclipse.compare.internal.core.patch.HunkResult;
+import org.eclipse.compare.patch.PatchConfiguration;
+import org.eclipse.compare.structuremergeviewer.Differencer;
+import org.eclipse.core.resources.IResource;
+
+public class HunkDiffNode extends PatchDiffNode {
+
+ private final HunkResult result;
+
+ public static HunkDiffNode createDiffNode(PatchFileDiffNode parent, HunkResult result, boolean fullContext) {
+ return createDiffNode(parent, result, fullContext, fullContext, fullContext);
+ }
+
+ public static HunkDiffNode createDiffNode(PatchFileDiffNode parent, HunkResult result, boolean ancestorFullContext, boolean leftFullContext, boolean rightFullContext) {
+ return new HunkDiffNode(result, parent, Differencer.CHANGE, getAncestorElement(result, ancestorFullContext), getLeftElement(result, leftFullContext), getRightElement(result, rightFullContext));
+ }
+
+ public static ITypedElement getRightElement(HunkResult result, boolean fullContext) {
+ return new HunkTypedElement(result, true /* isResult */, fullContext);
+ }
+
+ private static ITypedElement getLeftElement(HunkResult result,
+ boolean fullContext) {
+ if (fullContext && !result.isOK())
+ return new UnmatchedHunkTypedElement(result);
+ return new HunkTypedElement(result, false /* before state */, fullContext);
+ }
+
+ public static ITypedElement getAncestorElement(HunkResult result, boolean fullContext) {
+ if (!fullContext && result.isOK()) {
+ return new HunkTypedElement(result, false /* before state */, fullContext);
+ }
+ if (!fullContext) {
+ // Don't provide an ancestor if the hunk didn't match or we're not doing fullContext
+ return null;
+ }
+ // Make the ancestor the same as the left so we have an incoming change
+ return new HunkTypedElement(result, false /* before state */, result.isOK());
+ }
+
+ public HunkDiffNode(HunkResult result, PatchFileDiffNode parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) {
+ super(result.getHunk(), parent, kind, ancestor, left, right);
+ this.result = result;
+ }
+
+ public HunkResult getHunkResult() {
+ return result;
+ }
+
+ protected PatchConfiguration getConfiguration() {
+ return result.getDiffResult().getConfiguration();
+ }
+
+ public boolean isManuallyMerged() {
+ Object left = getLeft();
+ if (left instanceof UnmatchedHunkTypedElement) {
+ UnmatchedHunkTypedElement element = (UnmatchedHunkTypedElement) left;
+ return element.isManuallyMerged();
+ }
+ return false;
+ }
+
+ public boolean isFuzzUsed() {
+ return result.getFuzz() > 0;
+ }
+
+ public boolean isAllContextIgnored() {
+ int fuzz = result.getFuzz();
+ if (fuzz > 0) {
+ String[] lines = result.getHunk().getLines();
+ int contextLines = 0;
+ for (int i = 0; i < lines.length; i++) {
+ String line = lines[i];
+ char c = line.charAt(0);
+ if (c == ' ') {
+ contextLines++;
+ } else {
+ if (contextLines > 0 && fuzz >= contextLines) {
+ return true;
+ }
+ contextLines = 0;
+ }
+ }
+ if (contextLines > 0 && fuzz >= contextLines) {
+ return true;
+ }
+
+ }
+ return false;
+ }
+
+ public IResource getResource() {
+ return ((PatchFileDiffNode)getParent()).getResource();
+ }
+}

Back to the top