diff --git a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/ComplexityHolder.java b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/ComplexityHolder.java index 965da76359bf..d3aac9ce3900 100644 --- a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/ComplexityHolder.java +++ b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/ComplexityHolder.java @@ -12,7 +12,7 @@ import java.util.List; * @author Pavel.Dolgov */ class ComplexityHolder { - static final int MAX_ACCEPTABLE = 9; + static final int MAX_ACCEPTABLE = 12; static final int TOO_COMPLEX = 100; private final ObjectIntHashMap myCache = new ObjectIntHashMap<>(); diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression.java b/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression.java new file mode 100644 index 000000000000..e794a9657c75 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression.java @@ -0,0 +1,11 @@ +class C { + void foo(String x, int a, int b) { + String s1 = sum(a, b).substring(2, Math.max(a, b)); + String s2 = sum(a, 0).substring(2, Math.min(a, b) + 1); + String s3 = x.substring(2, a - b); + } + + String sum(int a, int b) { + return a + " " + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression_after.java b/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression_after.java new file mode 100644 index 000000000000..8fd42700004e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ParametrizedDuplicateExpression_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class C { + void foo(String x, int a, int b) { + String s1 = newMethod(sum(a, b), Math.max(a, b)); + String s2 = newMethod(sum(a, 0), Math.min(a, b) + 1); + String s3 = newMethod(x, a - b); + } + + @NotNull + private String newMethod(String sum, int max) { + return sum.substring(2, max); + } + + String sum(int a, int b) { + return a + " " + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java index 6f0aeabf7ba7..555f2f824d7a 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java @@ -947,6 +947,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doDuplicatesTest(); } + public void testParametrizedDuplicateExpression() throws Exception { + doDuplicatesTest(); + } + public void testSuggestChangeSignatureWithChangedParameterName() throws Exception { configureByFile(BASE_PATH + getTestName(false) + ".java"); boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, null, false, "p");