inheritance with checkDeep=false & anonymous fixed (IDEA-151341)

This commit is contained in:
Anna Kozlova
2016-06-06 11:59:27 +03:00
parent 2f17ca8a16
commit e90277c07e
2 changed files with 29 additions and 16 deletions

View File

@@ -56,7 +56,13 @@ public class InheritanceImplUtil {
@Nullable Set<PsiClass> checkedClasses) {
if (candidateClass instanceof PsiAnonymousClass) {
final PsiClass baseCandidateClass = ((PsiAnonymousClass)candidateClass).getBaseClassType().resolve();
return baseCandidateClass != null && InheritanceUtil.isInheritorOrSelf(baseCandidateClass, baseClass, checkDeep);
if (baseCandidateClass != null) {
if (!checkDeep) {
return baseCandidateClass.equals(baseClass);
}
return InheritanceUtil.isInheritorOrSelf(baseCandidateClass, baseClass, true);
}
return false;
}
if(checkDeep && LOG.isDebugEnabled()){
LOG.debug("Using uncached version for " + candidateClass.getQualifiedName() + " and " + baseClass);

View File

@@ -1,24 +1,31 @@
import java.io.*;
class Main {
static interface A
{
interface B { }
static class Outer {
static interface A {
interface B {}
}
static class D implements A {
private interface B {}
}
static class C extends D implements A {
interface E extends B {}
interface E1 extends D.B {}
interface E2 extends A.B {}
}
}
static class E {
{
D d = new D() {
void foo(<error descr="'D.B' has private access in 'D'">B</error> b){
static class D implements A
{
private interface B { }
}
};
}
}
static class C extends D implements A
{
interface E extends B { }
interface E1 extends D.B { }
interface E2 extends A.B { }
}
}