[extract duplicates] test: check when duplicates or change signature is declined

GitOrigin-RevId: 04d1cbdcac5721fca2817ecb4e5d20c6ebba191e
This commit is contained in:
Alexandr Suhinin
2022-02-07 13:25:43 +00:00
committed by intellij-monorepo-bot
parent 231c7f1bd1
commit 78900e11cd
6 changed files with 82 additions and 7 deletions
@@ -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 ->
@@ -0,0 +1,10 @@
public class Test {
void test(boolean condition) {
<selection>foo("one");</selection>
foo("one");
foo("two");
}
void foo(String name) {
}
}
@@ -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) {
}
}
@@ -0,0 +1,10 @@
public class Test {
void test(boolean condition) {
<selection>foo("one");</selection>
foo("one");
foo("two");
}
void foo(String name) {
}
}
@@ -0,0 +1,14 @@
public class Test {
void test(boolean condition) {
extracted();
extracted();
foo("two");
}
private void extracted() {
foo("one");
}
void foo(String name) {
}
}
@@ -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")