Cosmetics in JavaInnerClassResolver

This commit is contained in:
Pavel V. Talanov
2012-10-10 18:48:08 +04:00
parent 7693d99d1a
commit bdec46ac27
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.resolver; package org.jetbrains.jet.lang.resolve.java.resolver;
import com.google.common.collect.Lists;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiModifier;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -29,6 +30,7 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public final class JavaInnerClassResolver { public final class JavaInnerClassResolver {
@@ -49,40 +51,39 @@ public final class JavaInnerClassResolver {
} }
PsiClass[] innerPsiClasses = psiClass.getInnerClasses(); PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
List<ClassDescriptor> r = new ArrayList<ClassDescriptor>(innerPsiClasses.length); List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
for (PsiClass innerPsiClass : innerPsiClasses) { for (PsiClass innerPsiClass : innerPsiClasses) {
if (innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE)) { if (shouldBeIgnored(owner, innerPsiClass)) {
// TODO: hack against inner classes
continue;
}
if (innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) {
continue;
}
if (DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner)) {
// Inner enums will be put later into our class object
continue; continue;
} }
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass); ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
r.add(classDescriptor); result.add(classDescriptor);
} }
return r; return result;
}
private static boolean shouldBeIgnored(DeclarationDescriptor owner, PsiClass innerPsiClass) {
// TODO: hack against inner classes
return innerPsiClass.hasModifierProperty(PsiModifier.PRIVATE)
|| innerPsiClass.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)
|| DescriptorResolverUtils.isInnerEnum(innerPsiClass, owner);
} }
private List<ClassDescriptor> resolveInnerClassesOfClassObject(DeclarationDescriptor owner, PsiClass psiClass) { private List<ClassDescriptor> resolveInnerClassesOfClassObject(DeclarationDescriptor owner, PsiClass psiClass) {
if (!DescriptorUtils.isClassObject(owner)) { if (!DescriptorUtils.isClassObject(owner)) {
return new ArrayList<ClassDescriptor>(0); return Collections.emptyList();
} }
List<ClassDescriptor> r = new ArrayList<ClassDescriptor>(0); List<ClassDescriptor> result = Lists.newArrayList();
// If we're a class object, inner enums of our parent need to be put into us // If we're a class object, inner enums of our parent need to be put into us
DeclarationDescriptor containingDeclaration = owner.getContainingDeclaration(); DeclarationDescriptor containingDeclaration = owner.getContainingDeclaration();
for (PsiClass innerPsiClass : psiClass.getInnerClasses()) { for (PsiClass innerPsiClass : psiClass.getInnerClasses()) {
if (DescriptorResolverUtils.isInnerEnum(innerPsiClass, containingDeclaration)) { if (DescriptorResolverUtils.isInnerEnum(innerPsiClass, containingDeclaration)) {
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass); ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
r.add(classDescriptor); result.add(classDescriptor);
} }
} }
return r; return result;
} }
private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) { private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) {