mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
[extract duplicates] test: check when duplicates or change signature is declined
GitOrigin-RevId: 04d1cbdcac5721fca2817ecb4e5d20c6ebba191e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
231c7f1bd1
commit
78900e11cd
+13
-7
@@ -26,6 +26,12 @@ import com.siyeh.ig.psiutils.SideEffectChecker.mayHaveSideEffects
|
||||
|
||||
class DuplicatesMethodExtractor: InplaceExtractMethodProvider {
|
||||
|
||||
companion object {
|
||||
private val isSilentMode = ApplicationManager.getApplication().isUnitTestMode
|
||||
var changeSignatureDefault: Boolean? = true.takeIf { isSilentMode }
|
||||
var replaceDuplicatesDefault: Boolean? = true.takeIf { isSilentMode }
|
||||
}
|
||||
|
||||
private var duplicatesFinder: JavaDuplicatesFinder? = null
|
||||
|
||||
private var callsToReplace: List<SmartPsiElementPointer<PsiElement>>? = null
|
||||
@@ -103,14 +109,17 @@ class DuplicatesMethodExtractor: InplaceExtractMethodProvider {
|
||||
val dialog = SignatureSuggesterPreviewDialog(method, parametrizedExtraction.method, oldMethodCall, newMethodCall, parametrizedDuplicatesNumber)
|
||||
return dialog.showAndGet()
|
||||
}
|
||||
|
||||
val changeSignature = parametrizedDuplicatesNumber > 0 && (isSilentMode || confirmChangeSignature())
|
||||
val confirmChange: () -> Boolean = changeSignatureDefault?.let { default -> {default} } ?: ::confirmChangeSignature
|
||||
val changeSignature = parametrizedDuplicatesNumber > 0 && confirmChange()
|
||||
duplicates = if (changeSignature) duplicatesWithUnifiedParameters else exactDuplicates
|
||||
val parameters = if (changeSignature) updatedParameters else options.inputParameters
|
||||
val extractedElements = if (changeSignature) parametrizedExtraction else MethodExtractor.ExtractedElements(calls, method)
|
||||
|
||||
duplicates = confirmDuplicates(project, editor, duplicates)
|
||||
if (duplicates.isEmpty()) return
|
||||
duplicates = when (replaceDuplicatesDefault) {
|
||||
null -> confirmDuplicates (project, editor, duplicates)
|
||||
true -> duplicates
|
||||
false -> emptyList()
|
||||
}
|
||||
|
||||
val replacedMethod = runWriteAction {
|
||||
replacePsiRange(calls, extractedElements.callElements)
|
||||
@@ -152,8 +161,6 @@ class DuplicatesMethodExtractor: InplaceExtractMethodProvider {
|
||||
return firstRange.intersects(secondRange)
|
||||
}
|
||||
|
||||
private val isSilentMode = ApplicationManager.getApplication().isUnitTestMode
|
||||
|
||||
private fun findNewParameters(parameters: List<InputParameter>, duplicates: List<Duplicate>): List<InputParameter> {
|
||||
return duplicates
|
||||
.fold(parameters) { updatedParameters, duplicate -> updateParameters(updatedParameters, duplicate.changedExpressions) }
|
||||
@@ -161,7 +168,6 @@ class DuplicatesMethodExtractor: InplaceExtractMethodProvider {
|
||||
|
||||
private fun confirmDuplicates(project: Project, editor: Editor, duplicates: List<Duplicate>): List<Duplicate> {
|
||||
if (duplicates.isEmpty()) return duplicates
|
||||
if (isSilentMode) return duplicates
|
||||
val initialPosition = editor.caretModel.logicalPosition
|
||||
val confirmedDuplicates = mutableListOf<Duplicate>()
|
||||
duplicates.forEach { duplicate ->
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
public class Test {
|
||||
void test(boolean condition) {
|
||||
<selection>foo("one");</selection>
|
||||
foo("one");
|
||||
foo("two");
|
||||
}
|
||||
|
||||
void foo(String name) {
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
public class Test {
|
||||
void test(boolean condition) {
|
||||
extracted("one");
|
||||
foo("one");
|
||||
foo("two");
|
||||
}
|
||||
|
||||
private void extracted(String one) {
|
||||
foo(one);
|
||||
}
|
||||
|
||||
void foo(String name) {
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
public class Test {
|
||||
void test(boolean condition) {
|
||||
<selection>foo("one");</selection>
|
||||
foo("one");
|
||||
foo("two");
|
||||
}
|
||||
|
||||
void foo(String name) {
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
public class Test {
|
||||
void test(boolean condition) {
|
||||
extracted();
|
||||
extracted();
|
||||
foo("two");
|
||||
}
|
||||
|
||||
private void extracted() {
|
||||
foo("one");
|
||||
}
|
||||
|
||||
void foo(String name) {
|
||||
}
|
||||
}
|
||||
+21
@@ -11,6 +11,7 @@ import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.refactoring.RefactoringBundle
|
||||
import com.intellij.refactoring.extractMethod.newImpl.MethodExtractor
|
||||
import com.intellij.refactoring.extractMethod.newImpl.inplace.DuplicatesMethodExtractor
|
||||
import com.intellij.refactoring.listeners.RefactoringEventData
|
||||
import com.intellij.refactoring.listeners.RefactoringEventListener
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil.RefactoringErrorHintException
|
||||
@@ -206,6 +207,26 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testDuplicatedWithDeclinedChangeSignature(){
|
||||
val default = DuplicatesMethodExtractor.changeSignatureDefault
|
||||
try {
|
||||
DuplicatesMethodExtractor.changeSignatureDefault = false
|
||||
doTest()
|
||||
} finally {
|
||||
DuplicatesMethodExtractor.changeSignatureDefault = default
|
||||
}
|
||||
}
|
||||
|
||||
fun testDuplicatedButDeclined(){
|
||||
val default = DuplicatesMethodExtractor.replaceDuplicatesDefault
|
||||
try {
|
||||
DuplicatesMethodExtractor.replaceDuplicatesDefault = false
|
||||
doTest()
|
||||
} finally {
|
||||
DuplicatesMethodExtractor.replaceDuplicatesDefault = default
|
||||
}
|
||||
}
|
||||
|
||||
fun testRefactoringListener(){
|
||||
templateTest {
|
||||
configureByFile("$BASE_PATH/${getTestName(false)}.java")
|
||||
|
||||
Reference in New Issue
Block a user