From 965bef7bb48ccf7d621e5ee5167f5fcbff5a884e Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 18 Jun 2025 11:57:39 +0200 Subject: [PATCH] [java-refactoring] InlineLocalHandler: fixes after review of IDEA-371649 1. Exclude an option to rename the original variable if the type differs 2. Rename actions (cherry picked from commit 2fd3bb261163cbd5b0d4af0f986e27250abb0956) IJ-CR-162628 GitOrigin-RevId: 5d489d1030cf375d2a511be9edc9200a62bd045b --- .../refactoring/inline/InlineLocalHandler.java | 9 ++++----- .../com/siyeh/igfixes/inline/afterTwoVarsNormal.java | 2 +- .../com/siyeh/igfixes/inline/afterTwoVarsRename.java | 2 +- .../siyeh/igfixes/inline/afterTwoVarsRenameUsed.java | 2 +- .../igfixes/inline/beforeTwoVarsDifferentType.java | 10 ++++++++++ .../com/siyeh/igfixes/inline/beforeTwoVarsNormal.java | 2 +- .../com/siyeh/igfixes/inline/beforeTwoVarsRename.java | 2 +- .../siyeh/igfixes/inline/beforeTwoVarsRenameUsed.java | 2 +- .../resources/messages/RefactoringBundle.properties | 3 +-- .../codeInsight/daemon/quickFix/ActionHint.java | 4 +++- 10 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsDifferentType.java diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java index 93426955a4cf..7c61c5219afb 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -257,8 +257,8 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { } if (defToInline == local.getInitializer() && PsiUtil.skipParenthesizedExprDown(defToInline) instanceof PsiReferenceExpression ref && ControlFlowUtil.isEffectivelyFinal(local, containerBlock)) { - PsiElement target = ref.resolve(); - if (PsiUtil.isJvmLocalVariable(target)) { + if (ref.resolve() instanceof PsiVariable var && PsiUtil.isJvmLocalVariable(var) && + var.getType().equals(local.getType())) { return createRenameChooser(local, refsToInlineList); } } @@ -587,10 +587,9 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { case ASK -> JavaRefactoringBundle.message("inline.popup.ignore.conflicts"); case INLINE_ONE -> RefactoringBundle.message("inline.popup.this.only"); case INLINE_ALL_AND_DELETE -> RefactoringBundle.message("inline.popup.all", myAllRefs.size()); - case INLINE_ALL_KEEP_OLD_NAME -> RefactoringBundle.message("inline.popup.all.keep", requireNonNull( + case INLINE_ALL_KEEP_OLD_NAME -> RefactoringBundle.message("inline.popup.all.keep.name", requireNonNull( PsiUtil.skipParenthesizedExprDown(myVariable.getInitializer())).getText()); - case INLINE_ALL_RENAME_INITIALIZER -> RefactoringBundle.message("inline.popup.all.rename", requireNonNull( - PsiUtil.skipParenthesizedExprDown(myVariable.getInitializer())).getText(), myVariable.getName()); + case INLINE_ALL_RENAME_INITIALIZER -> RefactoringBundle.message("inline.popup.all.keep.name", myVariable.getName()); default -> throw new IllegalStateException("Unexpected value: " + myMode); }; } diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsNormal.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsNormal.java index 272cabad39a4..3b5d28925591 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsNormal.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsNormal.java @@ -1,4 +1,4 @@ -// "Inline variable|->Keep the 'vExposure' variable" "true-preview" +// "Inline variable|->Keep 'vExposure' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRename.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRename.java index 352080291f1a..8b90dd803d49 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRename.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRename.java @@ -1,4 +1,4 @@ -// "Inline variable|->Inline and rename 'vExposure' to 'exp'" "true-preview" +// "Inline variable|->Keep 'exp' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRenameUsed.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRenameUsed.java index 8369513dc46b..77ed0cdaa57c 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRenameUsed.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/afterTwoVarsRenameUsed.java @@ -1,4 +1,4 @@ -// "Inline variable|->Inline and rename 'vExposure' to 'exp'" "true-preview" +// "Inline variable|->Keep 'exp' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsDifferentType.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsDifferentType.java new file mode 100644 index 000000000000..0b9a09d93f35 --- /dev/null +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsDifferentType.java @@ -0,0 +1,10 @@ +// "Inline variable|->Keep 'pd' name" "false" +package com.example; + +class CastNeeded { + + double m(int p) { + double pd = p; + return pd/100; + } +} diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsNormal.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsNormal.java index 688d2c15cee8..c410d0e073ce 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsNormal.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsNormal.java @@ -1,4 +1,4 @@ -// "Inline variable|->Keep the 'vExposure' variable" "true-preview" +// "Inline variable|->Keep 'vExposure' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRename.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRename.java index d1dd6e2a8c5c..2e04c0434436 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRename.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRename.java @@ -1,4 +1,4 @@ -// "Inline variable|->Inline and rename 'vExposure' to 'exp'" "true-preview" +// "Inline variable|->Keep 'exp' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRenameUsed.java b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRenameUsed.java index 493f09bb6673..071ffdfe3759 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRenameUsed.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/inline/beforeTwoVarsRenameUsed.java @@ -1,4 +1,4 @@ -// "Inline variable|->Inline and rename 'vExposure' to 'exp'" "true-preview" +// "Inline variable|->Keep 'exp' name" "true-preview" package com.example; import java.util.ArrayList; diff --git a/platform/refactoring/resources/messages/RefactoringBundle.properties b/platform/refactoring/resources/messages/RefactoringBundle.properties index 822a7dd71a0c..bab488d8e16c 100644 --- a/platform/refactoring/resources/messages/RefactoringBundle.properties +++ b/platform/refactoring/resources/messages/RefactoringBundle.properties @@ -230,8 +230,7 @@ all.references.and.remove.the.local=Inline &all references and remove the variab this.reference.only.and.keep.the.variable=Inline this reference only and &keep the variable inline.popup.this.only=This reference only inline.popup.all=All {0} references and remove the variable -inline.popup.all.keep=Keep the ''{0}'' variable -inline.popup.all.rename=Inline and rename ''{0}'' to ''{1}'' +inline.popup.all.keep.name=Keep ''{0}'' name inline.variable.title=Inline Variable variable.is.referenced.in.multiple.files=Variable {0} is referenced in multiple files inline.command=Inline {0} diff --git a/platform/testFramework/src/com/intellij/codeInsight/daemon/quickFix/ActionHint.java b/platform/testFramework/src/com/intellij/codeInsight/daemon/quickFix/ActionHint.java index 4cb71e0d6d5c..66933b81fd31 100644 --- a/platform/testFramework/src/com/intellij/codeInsight/daemon/quickFix/ActionHint.java +++ b/platform/testFramework/src/com/intellij/codeInsight/daemon/quickFix/ActionHint.java @@ -128,7 +128,9 @@ public final class ActionHint { } ModCommand command = action.perform(context); if (!(command instanceof ModChooseAction chooseAction)) { - fail(exceptionHeader(curStep) + " does not produce a chooser"); + if (myShouldPresent) { + fail(exceptionHeader(curStep) + " does not produce a chooser"); + } return null; } commonActions = chooseAction.actions();