Java: Don't count overlapping fragments as duplicates (IDEA-180824)

This commit is contained in:
Pavel Dolgov
2017-10-19 20:19:14 +03:00
parent eea29c3415
commit 55e7940b53
4 changed files with 35 additions and 1 deletions

View File

@@ -193,7 +193,7 @@ public class DuplicatesFinder {
ArrayList<PsiElement> candidates = new ArrayList<>();
for (final PsiElement element : myPattern) {
if (sibling == null) return null;
if (!canBeEquivalent(element, sibling)) return null;
if (!canBeEquivalent(element, sibling) || sibling != candidate && isSelf(sibling)) return null;
candidates.add(sibling);
sibling = PsiTreeUtil.skipSiblingsForward(sibling, PsiWhiteSpace.class, PsiComment.class, PsiEmptyStatement.class);
}

View File

@@ -0,0 +1,13 @@
public class OverlappingDuplicate {
private void build(String fieldName, StringBuilder builder) {
builder.append("");
builder.append(fieldName);
builder.append("");
<selection>
builder.append("a");
builder.append("b");
builder.append("c");
builder.append("d");</selection>
builder.append("");
}
}

View File

@@ -0,0 +1,17 @@
public class OverlappingDuplicate {
private void build(String fieldName, StringBuilder builder) {
builder.append("");
builder.append(fieldName);
builder.append("");
newMethod(builder);
builder.append("");
}
private void newMethod(StringBuilder builder) {
builder.append("a");
builder.append("b");
builder.append("c");
builder.append("d");
}
}

View File

@@ -856,6 +856,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase {
doDuplicatesTest();
}
public void testOverlappingDuplicate() 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");