mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[extract duplicates] IDEA-285135: make main method static if duplicates are in static context
GitOrigin-RevId: 238b34892819401c23a6853f81e5664779e00136
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d303aaa9b2
commit
990b365dd5
@@ -126,20 +126,29 @@ class DuplicatesMethodExtractor(val extractOptions: ExtractOptions, val anchor:
|
||||
false -> emptyList()
|
||||
}
|
||||
|
||||
val replacedMethod = runWriteAction {
|
||||
replacePsiRange(calls, extractedElements.callElements)
|
||||
method.replace(extractedElements.method) as PsiMethod
|
||||
}
|
||||
|
||||
duplicates.forEach { duplicate ->
|
||||
val duplicatesExtractOptions = duplicates.map { duplicate ->
|
||||
val expressionMap = duplicate.changedExpressions.associate { (pattern, candidate) -> pattern to candidate }
|
||||
fun getMappedParameter(parameter: InputParameter): InputParameter {
|
||||
val references = parameter.references.map { expression -> expressionMap[expression] ?: expression }
|
||||
return parameter.copy(references = references)
|
||||
}
|
||||
|
||||
val duplicateOptions = findExtractOptions(duplicate.candidate).copy(inputParameters = parameters.map(::getMappedParameter))
|
||||
val callElements = CallBuilder(duplicateOptions.elements.first()).createCall(replacedMethod, duplicateOptions)
|
||||
findExtractOptions(duplicate.candidate).copy(inputParameters = parameters.map(::getMappedParameter))
|
||||
}
|
||||
|
||||
if (duplicatesExtractOptions.any { options -> options.isStatic }) {
|
||||
runWriteAction {
|
||||
extractedElements.method.modifierList.setModifierProperty(PsiModifier.STATIC, true)
|
||||
}
|
||||
}
|
||||
|
||||
val replacedMethod = runWriteAction {
|
||||
replacePsiRange(calls, extractedElements.callElements)
|
||||
method.replace(extractedElements.method) as PsiMethod
|
||||
}
|
||||
|
||||
duplicates.zip(duplicatesExtractOptions).forEach { (duplicate, extractOptions) ->
|
||||
val callElements = CallBuilder(extractOptions.elements.first()).createCall(replacedMethod, extractOptions)
|
||||
runWriteAction {
|
||||
replacePsiRange(duplicate.candidate, callElements)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
public class Test {
|
||||
static void staticContext() {
|
||||
System.out.println("hi");
|
||||
}
|
||||
|
||||
void nonStaticContext() {
|
||||
<selection>System.out.println("hi");</selection>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
public class Test {
|
||||
static void staticContext() {
|
||||
extracted();
|
||||
}
|
||||
|
||||
void nonStaticContext() {
|
||||
extracted();
|
||||
}
|
||||
|
||||
private static void extracted() {
|
||||
System.out.println("hi");
|
||||
}
|
||||
}
|
||||
@@ -397,6 +397,13 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() {
|
||||
}
|
||||
}
|
||||
|
||||
fun testExtractStaticDuplicateFromNonStaticContext(){
|
||||
runAndRevertSettings {
|
||||
JavaRefactoringSettings.getInstance().EXTRACT_STATIC_METHOD = false
|
||||
doTest()
|
||||
}
|
||||
}
|
||||
|
||||
fun testRefactoringListener(){
|
||||
templateTest {
|
||||
configureByFile("$BASE_PATH/${getTestName(false)}.java")
|
||||
|
||||
Reference in New Issue
Block a user