mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[extract method] IDEA-269072 IDEA-188743: reuse 'declare var type' option from 'introduce variable' refactoring
GitOrigin-RevId: 7a8f7a9eba3c7277da7b54e30a03afbbf771f84e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1d2c163976
commit
656b22fd2d
+13
-5
@@ -5,6 +5,8 @@ import com.intellij.psi.*
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil
|
||||
import com.intellij.psi.util.PsiUtil
|
||||
import com.intellij.refactoring.IntroduceVariableUtil
|
||||
import com.intellij.refactoring.JavaRefactoringSettings
|
||||
import com.intellij.refactoring.extractMethod.newImpl.ExtractMethodHelper.createDeclaration
|
||||
import com.intellij.refactoring.extractMethod.newImpl.structures.DataOutput
|
||||
import com.intellij.refactoring.extractMethod.newImpl.structures.DataOutput.*
|
||||
@@ -12,7 +14,6 @@ import com.intellij.refactoring.extractMethod.newImpl.structures.ExtractOptions
|
||||
import com.intellij.refactoring.extractMethod.newImpl.structures.FlowOutput
|
||||
import com.intellij.refactoring.extractMethod.newImpl.structures.FlowOutput.*
|
||||
import com.intellij.refactoring.util.RefactoringChangeUtil
|
||||
|
||||
class CallBuilder(private val context: PsiElement) {
|
||||
|
||||
private val factory: PsiElementFactory = PsiElementFactory.getInstance(context.project)
|
||||
@@ -37,9 +38,16 @@ class CallBuilder(private val context: PsiElement) {
|
||||
}
|
||||
val declarationStatement = declaration as? PsiDeclarationStatement
|
||||
val declaredVariable = declarationStatement?.declaredElements?.firstOrNull() as? PsiVariable
|
||||
if (dataOutput is VariableOutput && declaredVariable != null) {
|
||||
val needsFinal = dataOutput.variable.hasModifierProperty(PsiModifier.FINAL)
|
||||
PsiUtil.setModifierProperty(declaredVariable, PsiModifier.FINAL, needsFinal)
|
||||
if (declaredVariable != null) {
|
||||
val settings = JavaRefactoringSettings.getInstance()
|
||||
val outputVariable = (dataOutput as? VariableOutput)?.variable
|
||||
val declareFinal = outputVariable?.hasModifierProperty(PsiModifier.FINAL) == true || settings.INTRODUCE_LOCAL_CREATE_FINALS == true
|
||||
PsiUtil.setModifierProperty(declaredVariable, PsiModifier.FINAL, declareFinal)
|
||||
|
||||
val isInferredVar = outputVariable?.typeElement?.isInferredType == true
|
||||
if (isInferredVar || PsiUtil.isLanguageLevel10OrHigher(context) && settings.INTRODUCE_LOCAL_CREATE_VAR_TYPE == true) {
|
||||
IntroduceVariableUtil.expandDiamondsAndReplaceExplicitTypeWithVar(declaredVariable.typeElement, declaredVariable)
|
||||
}
|
||||
}
|
||||
return listOfNotNull(declaration)
|
||||
}
|
||||
@@ -108,7 +116,7 @@ class CallBuilder(private val context: PsiElement) {
|
||||
factory.createReferenceExpression(methodClass)
|
||||
}
|
||||
else {
|
||||
RefactoringChangeUtil.createThisExpression(PsiManager.getInstance(method.project), methodClass)
|
||||
RefactoringChangeUtil.createThisExpression(method.manager, methodClass)
|
||||
}
|
||||
callElement.methodExpression.qualifierExpression = ref
|
||||
}
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class SomeClass {
|
||||
|
||||
public void test(String filePath) {
|
||||
<selection>String s = "42";</selection>
|
||||
System.out.println(s);
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class SomeClass {
|
||||
|
||||
public void test(String filePath) {
|
||||
var s = getString();
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String getString() {
|
||||
String s = "42";
|
||||
return s;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class SomeClass {
|
||||
|
||||
public void test(String filePath) {
|
||||
<selection>var s = "42";</selection>
|
||||
System.out.println(s);
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class SomeClass {
|
||||
|
||||
public void test(String filePath) {
|
||||
var s = getString();
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String getString() {
|
||||
var s = "42";
|
||||
return s;
|
||||
}
|
||||
}
|
||||
+11
@@ -520,6 +520,15 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testKeepVarKeyword(){
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testDeclareVarType(){
|
||||
JavaRefactoringSettings.getInstance().INTRODUCE_LOCAL_CREATE_VAR_TYPE = true
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testRefactoringListener(){
|
||||
templateTest {
|
||||
configureByFile("$BASE_PATH/${getTestName(false)}.java")
|
||||
@@ -566,11 +575,13 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() {
|
||||
val settings = JavaRefactoringSettings.getInstance()
|
||||
val defaultStatic = settings.EXTRACT_STATIC_METHOD
|
||||
val defaultPassFields = settings.EXTRACT_STATIC_METHOD_AND_PASS_FIELDS
|
||||
val defaultDeclareVar = settings.INTRODUCE_LOCAL_CREATE_VAR_TYPE
|
||||
val defaultChangeSignature = DuplicatesMethodExtractor.changeSignatureDefault
|
||||
val defaultReplaceDuplicates = DuplicatesMethodExtractor.replaceDuplicatesDefault
|
||||
Disposer.register(testRootDisposable) {
|
||||
settings.EXTRACT_STATIC_METHOD = defaultStatic
|
||||
settings.EXTRACT_STATIC_METHOD_AND_PASS_FIELDS = defaultPassFields
|
||||
settings.INTRODUCE_LOCAL_CREATE_VAR_TYPE = defaultDeclareVar
|
||||
DuplicatesMethodExtractor.changeSignatureDefault = defaultChangeSignature
|
||||
DuplicatesMethodExtractor.replaceDuplicatesDefault = defaultReplaceDuplicates
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user