check for enclosing instance of type for top level extends type only (IDEA-65857)

This commit is contained in:
anna
2011-02-27 17:30:17 +01:00
parent e7d25e7775
commit 70308b234e
2 changed files with 15 additions and 4 deletions
@@ -656,7 +656,7 @@ public class HighlightClassUtil {
* @param extendRef points to the class in the extends list
* @param resolved extendRef resolved
*/
public static HighlightInfo checkClassExtendsForeignInnerClass(final PsiJavaCodeReferenceElement extendRef, PsiElement resolved) {
public static HighlightInfo checkClassExtendsForeignInnerClass(final PsiJavaCodeReferenceElement extendRef, final PsiElement resolved) {
PsiElement parent = extendRef.getParent();
if (!(parent instanceof PsiReferenceList)) {
return null;
@@ -701,9 +701,11 @@ public class HighlightClassUtil {
// must be inner class
if (!PsiUtil.isInnerClass(base)) return;
if (!hasEnclosingInstanceInScope(baseClass, extendRef, true) && !qualifiedNewCalledInConstructors(aClass, baseClass)) {
String description = JavaErrorMessages.message("no.enclosing.instance.in.scope", HighlightUtil.formatClass(baseClass));
infos[0] = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, extendRef, description);
if (resolve == resolved) {
if (!hasEnclosingInstanceInScope(baseClass, extendRef, true) && !qualifiedNewCalledInConstructors(aClass, baseClass)) {
String description = JavaErrorMessages.message("no.enclosing.instance.in.scope", HighlightUtil.formatClass(baseClass));
infos[0] = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, extendRef, description);
}
}
}
}
@@ -12,3 +12,12 @@ public abstract class A implements <error descr="'A.B' has private access in 'A'
//abstract class C implements error descr="'C.D' has private access in 'C'">C.D error {
// private static class D {}
//}
class JSReferenceSet {
static class MyResolver implements JSResolveUtil.Resolver<M> {}
class M extends JSResolveUtil.F {}
}
class JSResolveUtil {
static interface Resolver<T extends F> {}
static class F {}
}