diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java index 54ae5167601d..69ecf3d6a1bf 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java @@ -128,8 +128,7 @@ public class InplaceIntroduceParameterPopup extends AbstractJavaInplaceIntroduce @Override protected PsiElement checkLocalScope() { - final PsiVariable variable = getLocalVariable(); - return variable == null ? myMethod : PsiTreeUtil.getParentOfType(variable, PsiMethod.class); + return myMethod; } @Override diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1.java new file mode 100644 index 000000000000..96dd023479d8 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1.java @@ -0,0 +1,13 @@ +class Abc { + void foo() { + + new Runnable(){ + @Override + public void run() { + final String name = "name"; + System.out.println(name); + } + }; + } +} + diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1_after.java new file mode 100644 index 000000000000..6284bbc25837 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/localInsideAnonymous1_after.java @@ -0,0 +1,12 @@ +class Abc { + void foo(final String name) { + + new Runnable(){ + @Override + public void run() { + System.out.println(name); + } + }; + } +} + diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java index 6eb55cf539d2..349c15abc7d7 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java @@ -15,6 +15,8 @@ */ package com.intellij.refactoring; +import com.intellij.codeInsight.template.impl.TemplateManagerImpl; +import com.intellij.codeInsight.template.impl.TemplateState; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pass; @@ -22,6 +24,7 @@ import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiLocalVariable; import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer; import com.intellij.refactoring.introduceParameter.IntroduceParameterHandler; +import com.intellij.testFramework.LightPlatformTestCase; import org.jetbrains.annotations.NotNull; /** @@ -122,6 +125,34 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT }); } + public void testLocalInsideAnonymous1() throws Exception { + final Pass pass = new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroducePopup) { + } + }; + String name = getTestName(true); + configureByFile(getBasePath() + name + getExtension()); + final boolean enabled = getEditor().getSettings().isVariableInplaceRenameEnabled(); + try { + TemplateManagerImpl.setTemplateTesting(getProject(), getTestRootDisposable()); + getEditor().getSettings().setVariableInplaceRenameEnabled(true); + + //ensure extract local var + final MyIntroduceHandler introduceHandler = createIntroduceHandler(); + introduceHandler.invokeImpl(LightPlatformTestCase.getProject(), getLocalVariableFromEditor(), getEditor()); + final AbstractInplaceIntroducer introducer = introduceHandler.getInplaceIntroducer(); + pass.pass(introducer); + TemplateState state = TemplateManagerImpl.getTemplateState(getEditor()); + assert state != null; + state.gotoEnd(false); + checkResultByFile(getBasePath() + name + "_after" + getExtension()); + } + finally { + getEditor().getSettings().setVariableInplaceRenameEnabled(enabled); + } + } + @Override protected String getBasePath() { return BASE_PATH;