Hack to make tests pass

Inner classes of interfaces and inner interfaces are put in NonStaticMemberScope
This commit is contained in:
Pavel V. Talanov
2012-11-21 18:11:00 +04:00
parent 7f617de8ac
commit c726c95921
@@ -49,8 +49,10 @@ public final class JavaInnerClassResolver {
} }
@NotNull @NotNull
public List<ClassDescriptor> resolveInnerClasses(@NotNull DeclarationDescriptor owner, public List<ClassDescriptor> resolveInnerClasses(
@NotNull ClassPsiDeclarationProvider declarationProvider) { @NotNull DeclarationDescriptor owner,
@NotNull ClassPsiDeclarationProvider declarationProvider
) {
if (declarationProvider.isStaticMembers() && declarationProvider.getDeclarationOrigin() == KOTLIN) { if (declarationProvider.isStaticMembers() && declarationProvider.getDeclarationOrigin() == KOTLIN) {
return resolveInnerClassesOfClassObject(owner, declarationProvider.getPsiClass()); return resolveInnerClassesOfClassObject(owner, declarationProvider.getPsiClass());
} }
@@ -63,7 +65,7 @@ public final class JavaInnerClassResolver {
PsiClass[] innerPsiClasses = psiClass.getInnerClasses(); PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length); List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
for (PsiClass innerPsiClass : innerPsiClasses) { for (PsiClass innerPsiClass : innerPsiClasses) {
if (shouldBeIgnored(owner, innerPsiClass, isStatic)) { if (shouldBeIgnored(owner, psiClass, innerPsiClass, isStatic)) {
continue; continue;
} }
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass); ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
@@ -72,12 +74,20 @@ public final class JavaInnerClassResolver {
return result; return result;
} }
private static boolean shouldBeIgnored(DeclarationDescriptor owner, PsiClass innerPsiClass, boolean isStatic) { private static boolean shouldBeIgnored(DeclarationDescriptor owner, PsiClass psiClass, PsiClass innerPsiClass, boolean isStatic) {
// TODO: hack against inner classes if (innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE)
return innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE) || innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)
|| innerPsiClass.hasModifierProperty(PsiModifier.STATIC) != isStatic || DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner)) {
|| innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME) return true;
|| DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner); }
//TODO: this is a hack that puts interfaces and inner classes of interfaces (which are always static)
// inside NonStaticMemberScope
if (innerPsiClass.isInterface() || psiClass.isInterface()) {
return isStatic;
}
else {
return innerPsiClass.hasModifierProperty(PsiModifier.STATIC) != isStatic;
}
} }
private List<ClassDescriptor> resolveInnerClassesOfClassObject(@NotNull DeclarationDescriptor classObject, @NotNull PsiClass psiClass) { private List<ClassDescriptor> resolveInnerClassesOfClassObject(@NotNull DeclarationDescriptor classObject, @NotNull PsiClass psiClass) {