mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-07 22:09:38 +07:00
IDEA-156280 Incorrect evaluation inside anonymous class
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
public class AnonField {
|
||||
private String xxx;
|
||||
|
||||
public static void main(String[] args) {
|
||||
new AnonField().foo();
|
||||
}
|
||||
void foo() {
|
||||
String xxx = "local";
|
||||
new AnonField() {
|
||||
@Override
|
||||
public void foo() {
|
||||
System.out.println(<ref>xxx);
|
||||
}
|
||||
}.foo();
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.intellij.psi.resolve;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.search.JavaSourceFilterScope;
|
||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.testFramework.ResolveTestCase;
|
||||
|
||||
@@ -44,6 +45,22 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase {
|
||||
assertEquals("boolean", expr.getType().getCanonicalText());
|
||||
}
|
||||
|
||||
public void testResolveFieldVsLocalWithVisiblityChecker() throws Exception {
|
||||
PsiReference iRef = configure();
|
||||
|
||||
JavaCodeFragment codeFragment = JavaCodeFragmentFactory.getInstance(myProject).createExpressionCodeFragment(
|
||||
"xxx", iRef.getElement(), null, true);
|
||||
codeFragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE);
|
||||
|
||||
PsiElement[] fileContent = codeFragment.getChildren();
|
||||
assertEquals(1, fileContent.length);
|
||||
assertTrue(fileContent[0] instanceof PsiExpression);
|
||||
|
||||
PsiExpression expr = (PsiExpression) fileContent[0];
|
||||
PsiElement resolve = ((PsiReferenceExpressionImpl)expr).resolve();
|
||||
assertTrue("Must be local variable, not a field", resolve instanceof PsiLocalVariable);
|
||||
}
|
||||
|
||||
private PsiReference configure() throws Exception {
|
||||
return configureByFile("codeFragment/" + getTestName(false) + ".java");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user