From ed6d7fbc6d958e50eeda8fb22a98a4531277fcbc Mon Sep 17 00:00:00 2001 From: Alexandr Suhinin Date: Tue, 23 Jul 2024 14:52:30 +0300 Subject: [PATCH] [extract method] IDEA-356707: simplify and speedup name suggestion GitOrigin-RevId: 5a8baeec399127391f8e2069e6915f322c524458 --- .../newImpl/ExtractMethodHelper.kt | 20 +++++++------------ .../ChangeSignatureIsIgnored_after.java | 4 ++-- .../CheckNameExtractedFromLambda_after.java | 4 ++-- .../PassThisAsParameter_after.java | 4 ++-- .../SignatureChangeIsAvoided1_after.java | 4 ++-- .../SignatureChangeIsAvoided2_after.java | 4 ++-- 6 files changed, 17 insertions(+), 23 deletions(-) diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractMethodHelper.kt b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractMethodHelper.kt index dd7aceba838d..c042f31e395e 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractMethodHelper.kt +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractMethodHelper.kt @@ -4,11 +4,11 @@ package com.intellij.refactoring.extractMethod.newImpl import com.intellij.codeInsight.Nullability import com.intellij.codeInsight.NullableNotNullManager import com.intellij.codeInsight.PsiEquivalenceUtil -import com.intellij.codeInsight.generation.GenerateMembersUtil import com.intellij.codeInsight.intention.AddAnnotationPsiFix import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.Conditions import com.intellij.openapi.util.TextRange +import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.* import com.intellij.psi.codeStyle.JavaCodeStyleManager import com.intellij.psi.codeStyle.VariableKind @@ -217,7 +217,7 @@ object ExtractMethodHelper { fun guessMethodName(options: ExtractOptions): List { val project = options.project - val initialMethodNames: MutableSet = LinkedHashSet() + val variableNames: MutableSet = LinkedHashSet() val codeStyleManager = JavaCodeStyleManager.getInstance(project) as JavaCodeStyleManagerImpl val returnType = options.dataOutput.type @@ -225,7 +225,7 @@ object ExtractMethodHelper { if (expression != null || returnType !is PsiPrimitiveType) { codeStyleManager.suggestVariableName(VariableKind.FIELD, null, expression, returnType).names .forEach { name -> - initialMethodNames += codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD) + variableNames += codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD) } } @@ -235,19 +235,13 @@ object ExtractMethodHelper { val propertyName = codeStyleManager.variableNameToPropertyName(outVariable.name!!, outKind) val names = codeStyleManager.suggestVariableName(VariableKind.FIELD, propertyName, null, outVariable.type).names names.forEach { name -> - initialMethodNames += codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD) + variableNames += codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD) } } - val normalizedType = (returnType as? PsiEllipsisType)?.toArrayType() ?: returnType - val field = JavaPsiFacade.getElementFactory(project).createField("fieldNameToReplace", normalizedType) - fun suggestGetterName(name: String): String { - field.name = name - return GenerateMembersUtil.suggestGetterName(field) - } - - return initialMethodNames.filter { PsiNameHelper.getInstance(project).isIdentifier(it) } - .map { propertyName -> suggestGetterName(propertyName) } + val prefix = if (returnType == PsiTypes.booleanType()) "is" else "get" + return variableNames.filter { PsiNameHelper.getInstance(project).isIdentifier(it) } + .map { variableName -> "$prefix${StringUtil.capitalize(variableName)}" } } fun replacePsiRange(source: List, target: List): List { diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/ChangeSignatureIsIgnored_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/ChangeSignatureIsIgnored_after.java index eaa8e72f0221..39813d537afd 100644 --- a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/ChangeSignatureIsIgnored_after.java +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/ChangeSignatureIsIgnored_after.java @@ -1,10 +1,10 @@ class SomeClass { public boolean test(String filePath) { - return isaBoolean(filePath); + return isABoolean(filePath); } - private static boolean isaBoolean(String filePath) { + private static boolean isABoolean(String filePath) { return FileUtilRt.extensionEquals(filePath, "jar") || FileUtilRt.extensionEquals(filePath, "zip"); } diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/CheckNameExtractedFromLambda_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/CheckNameExtractedFromLambda_after.java index 4ad7add8cddd..cabf6d884785 100644 --- a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/CheckNameExtractedFromLambda_after.java +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/CheckNameExtractedFromLambda_after.java @@ -15,11 +15,11 @@ class Child extends Parent { public boolean test(Collection files) { return files.stream().allMatch(file -> { String name = file.getName(); - return isaBoolean(name); + return isABoolean(name); }); } - private static boolean isaBoolean(String name) { + private static boolean isABoolean(String name) { return name.endsWith("jar") || name.endsWith("tar"); } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/PassThisAsParameter_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/PassThisAsParameter_after.java index f5a45d8cea98..2a1d433656d3 100644 --- a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/PassThisAsParameter_after.java +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/PassThisAsParameter_after.java @@ -1,9 +1,9 @@ public class Test { public Test test() { - return getkTest(this); + return getKTest(this); } - private static Test getkTest(Test test) { + private static Test getKTest(Test test) { return test; } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided1_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided1_after.java index 36a15af2f3c3..2132fe25d837 100644 --- a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided1_after.java +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided1_after.java @@ -1,7 +1,7 @@ public class Test { void test() { - if (isaBoolean()) { + if (isABoolean()) { System.out.println(); } if (getSize2() < getLimit2() && getCondition1()) { @@ -9,7 +9,7 @@ public class Test { } } - private boolean isaBoolean() { + private boolean isABoolean() { return getSize1() < getLimit1() && getCondition1(); } diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided2_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided2_after.java index 40716b085da1..ce66451e592a 100644 --- a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided2_after.java +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/SignatureChangeIsAvoided2_after.java @@ -1,7 +1,7 @@ public class Test { void test() { - if (isaBoolean()) { + if (isABoolean()) { System.out.println(); } if (getSize2() < getLimit2()) { @@ -9,7 +9,7 @@ public class Test { } } - private boolean isaBoolean() { + private boolean isABoolean() { return getSize1() < getLimit1(); }