From 7bf7cb9e6f28247d61187dc1e0a371cd70ede6ed Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 5 Dec 2012 16:09:45 +0100 Subject: [PATCH] when detect inaccessible classes in static context take into account NewExpression qualifiers --- .../impl/analysis/HighlightVisitorImpl.java | 18 +++++++++++++++++- .../InstanceClassInStaticContextAccess.java | 12 ++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index d9df710b84b7..ad0369bf908c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -905,7 +905,23 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh final PsiClass aClass = ((PsiClass)resolved).getContainingClass(); if (aClass != null) { final PsiElement qualifier = ref.getQualifier(); - final PsiElement place = qualifier instanceof PsiJavaCodeReferenceElement ? ((PsiJavaCodeReferenceElement)qualifier).resolve() : ref; + final PsiElement place; + if (qualifier instanceof PsiJavaCodeReferenceElement) { + place = ((PsiJavaCodeReferenceElement)qualifier).resolve(); + } + else { + if (parent instanceof PsiNewExpression) { + final PsiExpression newQualifier = ((PsiNewExpression)parent).getQualifier(); + if (newQualifier != null) { + place = PsiUtil.resolveClassInType(newQualifier.getType()); + } else { + place = ref; + } + } + else { + place = ref; + } + } if (PsiTreeUtil.isAncestor(aClass, place, false) && aClass.hasTypeParameters()) { myHolder.add(HighlightClassUtil.checkCreateInnerClassFromStaticContext(ref, place, (PsiClass)resolved)); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java index 32e725e7f2cc..dcfad56b17ba 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java @@ -48,3 +48,15 @@ class MyTest1 { } } } + +class MyTest2 { + static class A { + private MyTest2 myTest; + + public Object foo() { + return myTest.new Bar(); + } + } + + class Bar {} +}