From e13b2437e0fc862220c7cbde4e9b12b7e339d1e1 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 9 Feb 2017 13:22:27 +0300 Subject: [PATCH] diff: extract method --- .../src/com/intellij/diff/comparison/ByLine.java | 3 +-- .../src/com/intellij/diff/comparison/ChunkOptimizer.java | 9 +++------ .../src/com/intellij/diff/comparison/ComparisonUtil.java | 7 +++++++ .../intellij/diff/comparison/ComparisonUtilAutoTest.kt | 5 ++--- platform/util/resources/misc/registry.properties | 1 + 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/comparison/ByLine.java b/platform/diff-impl/src/com/intellij/diff/comparison/ByLine.java index 32f4f0d26e4c..b6d803d8879a 100644 --- a/platform/diff-impl/src/com/intellij/diff/comparison/ByLine.java +++ b/platform/diff-impl/src/com/intellij/diff/comparison/ByLine.java @@ -21,7 +21,6 @@ import com.intellij.diff.util.MergeRange; import com.intellij.diff.util.Range; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import gnu.trove.TIntArrayList; @@ -306,7 +305,7 @@ public class ByLine { private static FairDiffIterable compareSmart(@NotNull List lines1, @NotNull List lines2, @NotNull ProgressIndicator indicator) { - int threshold = Registry.intValue("diff.unimportant.line.char.count"); + int threshold = ComparisonUtil.getUnimportantLineCharCount(); if (threshold == 0) return diff(lines1, lines2, indicator); Pair, TIntArrayList> bigLines1 = getBigLines(lines1, threshold); diff --git a/platform/diff-impl/src/com/intellij/diff/comparison/ChunkOptimizer.java b/platform/diff-impl/src/com/intellij/diff/comparison/ChunkOptimizer.java index 5473af0c275a..97eac18e2a64 100644 --- a/platform/diff-impl/src/com/intellij/diff/comparison/ChunkOptimizer.java +++ b/platform/diff-impl/src/com/intellij/diff/comparison/ChunkOptimizer.java @@ -22,7 +22,6 @@ import com.intellij.diff.comparison.iterables.FairDiffIterable; import com.intellij.diff.util.Range; import com.intellij.diff.util.Side; import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.util.registry.Registry; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -215,19 +214,17 @@ abstract class ChunkOptimizer { * bad: "ABooYZ AB[uuYZ AB]zzYZ" - "ABooYZ AB[]zzYZ" */ public static class LineChunkOptimizer extends ChunkOptimizer { - private final int myThreshold; - public LineChunkOptimizer(@NotNull List lines1, @NotNull List lines2, @NotNull FairDiffIterable changes, @NotNull ProgressIndicator indicator) { super(lines1, lines2, changes, indicator); - myThreshold = Registry.intValue("diff.unimportant.line.char.count"); } @Override protected int getShift(@NotNull Side touchSide, int equalForward, int equalBackward, @NotNull Range range1, @NotNull Range range2) { Integer shift; + int threshold = ComparisonUtil.getUnimportantLineCharCount(); shift = getUnchangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, 0); if (shift != null) return shift; @@ -235,10 +232,10 @@ abstract class ChunkOptimizer { shift = getChangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, 0); if (shift != null) return shift; - shift = getUnchangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, myThreshold); + shift = getUnchangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, threshold); if (shift != null) return shift; - shift = getChangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, myThreshold); + shift = getChangedBoundaryShift(touchSide, equalForward, equalBackward, range1, range2, threshold); if (shift != null) return shift; return 0; diff --git a/platform/diff-impl/src/com/intellij/diff/comparison/ComparisonUtil.java b/platform/diff-impl/src/com/intellij/diff/comparison/ComparisonUtil.java index a65245ba9656..b863677efe4b 100644 --- a/platform/diff-impl/src/com/intellij/diff/comparison/ComparisonUtil.java +++ b/platform/diff-impl/src/com/intellij/diff/comparison/ComparisonUtil.java @@ -15,11 +15,14 @@ */ package com.intellij.diff.comparison; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; public class ComparisonUtil { + private static final int UNIMPORTANT_LINE_CHAR_COUNT = Registry.intValue("diff.unimportant.line.char.count"); + @Contract(pure = true) public static boolean isEquals(@NotNull CharSequence text1, @NotNull CharSequence text2, @NotNull ComparisonPolicy policy) { switch (policy) { @@ -64,4 +67,8 @@ public class ComparisonUtil { if (lastLine1) return true; } } + + public static int getUnimportantLineCharCount() { + return UNIMPORTANT_LINE_CHAR_COUNT; + } } diff --git a/platform/diff-impl/tests/com/intellij/diff/comparison/ComparisonUtilAutoTest.kt b/platform/diff-impl/tests/com/intellij/diff/comparison/ComparisonUtilAutoTest.kt index 13d839f18313..c415aa47ae47 100644 --- a/platform/diff-impl/tests/com/intellij/diff/comparison/ComparisonUtilAutoTest.kt +++ b/platform/diff-impl/tests/com/intellij/diff/comparison/ComparisonUtilAutoTest.kt @@ -25,7 +25,6 @@ import com.intellij.diff.util.ThreeSide import com.intellij.openapi.editor.Document import com.intellij.openapi.editor.impl.DocumentImpl import com.intellij.openapi.util.Couple -import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.util.text.StringUtil class ComparisonUtilAutoTest : DiffTestCase() { @@ -516,8 +515,8 @@ class ComparisonUtilAutoTest : DiffTestCase() { // in non-squashed blocks non-trimmed elements are possible if (allowNonSquashed) { if (policy != ComparisonPolicy.IGNORE_WHITESPACES) return - if (countNonWhitespaceCharacters(line1) <= Registry.get("diff.unimportant.line.char.count").asInteger()) return - if (countNonWhitespaceCharacters(line2) <= Registry.get("diff.unimportant.line.char.count").asInteger()) return + if (countNonWhitespaceCharacters(line1) <= ComparisonUtil.getUnimportantLineCharCount()) return + if (countNonWhitespaceCharacters(line2) <= ComparisonUtil.getUnimportantLineCharCount()) return } assertFalse(MANAGER.isEquals(line1, line2, policy)) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index a3b9af12754b..3f37d6700f51 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -519,6 +519,7 @@ diff.verify.iterable.description=Enable diff algorithm self check diff.verify.iterable.restartRequired=true diff.unimportant.line.char.count=3 diff.unimportant.line.char.count.description=Threshold number of non-space characters to mark line as unimportant +diff.unimportant.line.char.count.restartRequired=true diff.maximum.changes.array.size=10000000 diff.maximum.changes.array.size.restartRequired=true diff.divider.repainting.disable.blitting=true