lambda: treat fields qualified with this as unqualified (IDEA-154174)

This commit is contained in:
Anna.Kozlova
2016-04-05 18:27:32 +02:00
parent 512341e08a
commit 2e3c2261ad
2 changed files with 19 additions and 1 deletions
@@ -861,7 +861,7 @@ public class ControlFlowUtil {
private static PsiReferenceExpression findReferenceTo(PsiElement element, PsiVariable variable) {
if (element instanceof PsiReferenceExpression
&& !((PsiReferenceExpression)element).isQualified()
&& isUnqualified((PsiReferenceExpression)element)
&& ((PsiReferenceExpression)element).resolve() == variable) {
return (PsiReferenceExpression)element;
}
@@ -873,6 +873,14 @@ public class ControlFlowUtil {
return null;
}
private static boolean isUnqualified(PsiReferenceExpression element) {
if (element.isQualified()) {
final PsiExpression qualifierExpression = element.getQualifierExpression();
return qualifierExpression instanceof PsiThisExpression && ((PsiThisExpression)qualifierExpression).getQualifier() == null;
}
return true;
}
public static boolean isVariableDefinitelyAssigned(@NotNull final PsiVariable variable, @NotNull final ControlFlow flow) {
class MyVisitor extends InstructionClientVisitor<Boolean> {
@@ -89,3 +89,13 @@ class TestAnonymousWithRefToTheTopLevelUninitializedField {
}
class TestThisQualified {
final String s;
final Runnable r = () -> System.out.println(<error descr="Variable 'this.s' might not have been initialized">this.s</error>.length());
final Runnable r2 = () -> System.out.println(this.r2);
public TestThisQualified() {
s = "";
}
}