mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[extract duplicates] fix: ignore overlapped duplicates
GitOrigin-RevId: d5f3a1f737ec3a4b362a5abc04d63f48f4303496
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8e9330e280
commit
31c5102ca1
+10
-9
@@ -22,40 +22,41 @@ class JavaDuplicatesFinder(pattern: List<PsiElement>, private val terminalNodes:
|
||||
}
|
||||
|
||||
fun findDuplicates(scope: PsiElement): List<Duplicate> {
|
||||
val ignoredElements = pattern.toSet()
|
||||
val ignoredElements = HashSet<PsiElement>(pattern)
|
||||
|
||||
val duplicates = mutableListOf<Duplicate>()
|
||||
|
||||
val patternExpression = pattern.singleOrNull() as? PsiExpression
|
||||
if (patternExpression != null) {
|
||||
val expressionVisitor = object : JavaRecursiveElementWalkingVisitor(){
|
||||
val visitor = if (patternExpression != null) {
|
||||
object : JavaRecursiveElementWalkingVisitor(){
|
||||
override fun visitExpression(expression: PsiExpression) {
|
||||
if (expression in ignoredElements) return
|
||||
val duplicate = createDuplicate(childrenOf(patternExpression), childrenOf(expression))
|
||||
if (duplicate != null && ! isOvercomplicated(duplicate)) {
|
||||
if (duplicate != null) {
|
||||
duplicates += duplicate.copy(pattern = listOf(patternExpression), candidate = listOf(expression))
|
||||
} else {
|
||||
super.visitExpression(expression)
|
||||
}
|
||||
}
|
||||
}
|
||||
scope.accept(expressionVisitor)
|
||||
} else {
|
||||
val visitor = object: JavaRecursiveElementWalkingVisitor() {
|
||||
object: JavaRecursiveElementWalkingVisitor() {
|
||||
override fun visitStatement(statement: PsiStatement) {
|
||||
if (statement in ignoredElements) return
|
||||
val siblings = siblingsOf(statement).take(pattern.size).toList()
|
||||
val duplicate = createDuplicate(pattern, siblings)
|
||||
if (duplicate != null && ! isOvercomplicated(duplicate)) {
|
||||
if (duplicate != null) {
|
||||
duplicates += duplicate
|
||||
ignoredElements += duplicate.candidate
|
||||
} else {
|
||||
super.visitStatement(statement)
|
||||
}
|
||||
}
|
||||
}
|
||||
scope.accept(visitor)
|
||||
}
|
||||
scope.accept(visitor)
|
||||
|
||||
return duplicates
|
||||
return duplicates.filterNot(::isOvercomplicated)
|
||||
}
|
||||
|
||||
private fun isNoise(it: PsiElement) = it is PsiWhiteSpace || it is PsiComment || it is PsiEmptyStatement
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
public class Test {
|
||||
void test(){
|
||||
<selection>System.out.println();
|
||||
System.out.println();
|
||||
System.out.println();</selection>
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
public class Test {
|
||||
void test(){
|
||||
extracted();
|
||||
extracted();
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private void extracted() {
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
+4
@@ -123,6 +123,10 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testOverlappingRanges(){
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testRefactoringListener(){
|
||||
templateTest {
|
||||
configureByFile("$BASE_PATH/${getTestName(false)}.java")
|
||||
|
||||
Reference in New Issue
Block a user