IDEA-156280 Incorrect evaluation inside anonymous class

This commit is contained in:
Egor.Ushakov
2016-05-19 15:00:41 +03:00
parent a12df12875
commit 6297690daf
3 changed files with 37 additions and 2 deletions

View File

@@ -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();
}
}

View File

@@ -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");
}