From c726c959217377717cde7bab09ea0d92ac475942 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 21 Nov 2012 18:11:00 +0400 Subject: [PATCH] Hack to make tests pass Inner classes of interfaces and inner interfaces are put in NonStaticMemberScope --- .../java/resolver/JavaInnerClassResolver.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaInnerClassResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaInnerClassResolver.java index 6e6a758684e..41a8a001eee 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaInnerClassResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaInnerClassResolver.java @@ -49,8 +49,10 @@ public final class JavaInnerClassResolver { } @NotNull - public List resolveInnerClasses(@NotNull DeclarationDescriptor owner, - @NotNull ClassPsiDeclarationProvider declarationProvider) { + public List resolveInnerClasses( + @NotNull DeclarationDescriptor owner, + @NotNull ClassPsiDeclarationProvider declarationProvider + ) { if (declarationProvider.isStaticMembers() && declarationProvider.getDeclarationOrigin() == KOTLIN) { return resolveInnerClassesOfClassObject(owner, declarationProvider.getPsiClass()); } @@ -63,7 +65,7 @@ public final class JavaInnerClassResolver { PsiClass[] innerPsiClasses = psiClass.getInnerClasses(); List result = new ArrayList(innerPsiClasses.length); for (PsiClass innerPsiClass : innerPsiClasses) { - if (shouldBeIgnored(owner, innerPsiClass, isStatic)) { + if (shouldBeIgnored(owner, psiClass, innerPsiClass, isStatic)) { continue; } ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass); @@ -72,12 +74,20 @@ public final class JavaInnerClassResolver { return result; } - private static boolean shouldBeIgnored(DeclarationDescriptor owner, PsiClass innerPsiClass, boolean isStatic) { - // TODO: hack against inner classes - return innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE) - || innerPsiClass.hasModifierProperty(PsiModifier.STATIC) != isStatic - || innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME) - || DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner); + private static boolean shouldBeIgnored(DeclarationDescriptor owner, PsiClass psiClass, PsiClass innerPsiClass, boolean isStatic) { + if (innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE) + || innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME) + || DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner)) { + return true; + } + //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 resolveInnerClassesOfClassObject(@NotNull DeclarationDescriptor classObject, @NotNull PsiClass psiClass) {