IDEA-121180 Exception: Introduce parameter from final local var in anonymous class

This commit is contained in:
Anna Kozlova
2014-03-18 20:00:57 +01:00
parent 6af1d4e49a
commit a97bc5c796
4 changed files with 47 additions and 1 deletions
@@ -32,6 +32,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.RefactoringActionHandler;
@@ -128,7 +129,8 @@ public class InplaceIntroduceParameterPopup extends AbstractJavaInplaceIntroduce
@Override
protected PsiElement checkLocalScope() {
return myMethod;
final PsiVariable variable = getLocalVariable();
return variable == null ? myMethod : PsiTreeUtil.getParentOfType(variable, PsiMethod.class);
}
@Override
@@ -0,0 +1,18 @@
class Abc {
void foo() {
final String name = "name";
new Runnable(){
@Override
public void run() {
foo();
}
private void foo() {
System.out.println(na<caret>me);
}
};
}
}
@@ -0,0 +1,18 @@
class Abc {
void foo() {
final String name = "name";
new Runnable(){
@Override
public void run() {
foo(name);
}
private void foo(String name1) {
System.out.println(name1);
}
};
}
}
@@ -86,6 +86,14 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT
});
}
public void testLocalInsideAnonymous() throws Exception {
doTest(new Pass<AbstractInplaceIntroducer>() {
@Override
public void pass(AbstractInplaceIntroducer inplaceIntroducePopup) {
}
});
}
@Override
protected String getBasePath() {
return BASE_PATH;