Hack to make tests pass
Inner classes of interfaces and inner interfaces are put in NonStaticMemberScope
This commit is contained in:
+19
-9
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user