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 6273ff8b3942..d79c9dda63d9 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 @@ -101,7 +101,7 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { } final PsiReferenceExpression refExpr = PsiTreeUtil.getParentOfType(element, PsiReferenceExpression.class); InlineMode mode; - if (JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS) mode = InlineMode.INLINE_ONE; + if (refExpr != null && JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS) mode = InlineMode.INLINE_ONE; else mode = InlineMode.CHECK_CONFLICTS; return doInline(context, (PsiVariable)Objects.requireNonNull(context.element()), refExpr, mode); @@ -109,11 +109,11 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { private static ModCommand doInline(@NotNull ActionContext context, @NotNull PsiVariable var, - PsiReferenceExpression refExpr, + @Nullable PsiReferenceExpression refExpr, @NotNull InlineMode mode) { PsiElement block = PsiUtil.getVariableCodeBlock(var, null); List allRefs = - mode == InlineMode.INLINE_ONE || block == null ? List.of(refExpr) : + refExpr != null && (mode == InlineMode.INLINE_ONE || block == null) ? List.of(refExpr) : VariableAccessUtils.getVariableReferences(var, block); if (allRefs.isEmpty()) { return ModCommand.error(RefactoringBundle.message("variable.is.never.used", var.getName())); @@ -204,7 +204,7 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { List refsToInlineList = new ArrayList<>(); boolean simpleInlining = false; - if (mode == InlineMode.INLINE_ONE) { + if (mode == InlineMode.INLINE_ONE && refExpr != null) { refsToInlineList.add(refExpr); } else { if (defToInline == local.getInitializer()) { diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java new file mode 100644 index 000000000000..fba2706ddf28 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java @@ -0,0 +1,6 @@ +class X { + void foo() { + int x = 2; + System.out.println(x + x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java.after new file mode 100644 index 000000000000..beeda780f175 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVariableInThisOnlyMode.java.after @@ -0,0 +1,5 @@ +class X { + void foo() { + System.out.println(2 + 2); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java index 644cb984561e..8c99a866f079 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java @@ -3,14 +3,13 @@ package com.intellij.java.refactoring.inline; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.TargetElementUtil; -import com.intellij.java.refactoring.JavaRefactoringBundle; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiLocalVariable; -import com.intellij.refactoring.RefactoringBundle; +import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.inline.InlineLocalHandler; import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.LightJavaCodeInsightTestCase; @@ -371,6 +370,17 @@ public class InlineLocalTest extends LightJavaCodeInsightTestCase { "Variable is used as resource reference"); } + public void testLocalVariableInThisOnlyMode() { + boolean initialSetting = JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS; + try { + JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS = true; + doTest(); + } + finally { + JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS = initialSetting; + } + } + private void doTest() { doTest(LanguageLevel.JDK_1_7); }