Refactor ClassDescriptorFromJvmBytecode: remove ClassDescriptorFromJvmBytecode#getResolverBinaryClassData

This commit is contained in:
Pavel V. Talanov
2012-11-02 21:55:38 +04:00
parent c808aa398c
commit 956a34b578
4 changed files with 40 additions and 42 deletions
@@ -16,9 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.descriptor;
import com.intellij.psi.PsiClass;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassKind;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -26,7 +24,6 @@ import org.jetbrains.jet.lang.descriptors.MutableClassDescriptorLite;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.data.ResolverClassData;
import org.jetbrains.jet.lang.resolve.lazy.LazyClassDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
@@ -38,8 +35,8 @@ import java.util.Collection;
public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
@NotNull
private final JavaDescriptorResolver javaDescriptorResolver;
@NotNull
private final ResolverClassData resolverBinaryClassData;
private ResolverClassData resolverBinaryClassData = null;
// lazy
@@ -47,24 +44,23 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
public ClassDescriptorFromJvmBytecode(
@NotNull DeclarationDescriptor containingDeclaration, @NotNull ClassKind kind,
@NotNull PsiClass psiClass, @Nullable FqName fqName,
@NotNull JavaDescriptorResolver javaDescriptorResolver) {
@NotNull JavaDescriptorResolver javaDescriptorResolver
) {
super(containingDeclaration, kind);
this.javaDescriptorResolver = javaDescriptorResolver;
this.resolverBinaryClassData = ResolverClassData.createBinaryClassData(psiClass, fqName, this);
}
@NotNull
public ResolverClassData getResolverBinaryClassData() {
return resolverBinaryClassData;
}
@NotNull
@Override
public Collection<ConstructorDescriptor> getConstructors() {
if (constructors == null) {
assert resolverBinaryClassData != null;
this.constructors = javaDescriptorResolver.resolveConstructors(resolverBinaryClassData);
}
return constructors;
}
public void setClassData(@NotNull ResolverClassData resolverBinaryClassData) {
this.resolverBinaryClassData = resolverBinaryClassData;
}
}
@@ -76,14 +76,14 @@ public final class JavaClassObjectResolver {
}
@Nullable
public ResolverClassData createClassObjectDescriptor(
public ClassDescriptorFromJvmBytecode createClassObjectDescriptor(
@NotNull ClassDescriptor containing,
@NotNull PsiClass psiClass
) {
DescriptorResolverUtils.checkPsiClassIsNotJet(psiClass);
if (psiClass.isEnum()) {
return createClassObjectDescriptorForEnum(containing, psiClass).getResolverBinaryClassData();
return createClassObjectDescriptorForEnum(containing, psiClass);
}
if (!DescriptorResolverUtils.isKotlinClass(psiClass)) {
@@ -91,7 +91,7 @@ public final class JavaClassObjectResolver {
}
if (hasInnerEnums(containing, psiClass)) {
return createSyntheticClassObject(containing, psiClass).getResolverBinaryClassData();
return createSyntheticClassObject(containing, psiClass);
}
PsiClass classObjectPsiClass = getClassObjectPsiClass(psiClass);
@@ -103,19 +103,21 @@ public final class JavaClassObjectResolver {
}
@NotNull
private ResolverClassData createClassObjectFromPsi(@NotNull ClassDescriptor containing, @NotNull PsiClass classObjectPsiClass) {
private ClassDescriptorFromJvmBytecode createClassObjectFromPsi(
@NotNull ClassDescriptor containing,
@NotNull PsiClass classObjectPsiClass
) {
String qualifiedName = classObjectPsiClass.getQualifiedName();
assert qualifiedName != null;
FqName fqName = new FqName(qualifiedName);
ResolverClassData classData = new ClassDescriptorFromJvmBytecode(
containing, ClassKind.CLASS_OBJECT, classObjectPsiClass, fqName, javaDescriptorResolver)
.getResolverBinaryClassData();
ClassDescriptorFromJvmBytecode classObjectDescriptor = classData.getClassDescriptor();
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(new PsiClassWrapper(classObjectPsiClass), classData,
ClassDescriptorFromJvmBytecode classObjectDescriptor
= new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver);
ResolverClassData classObjectData = ResolverClassData.createBinaryClassData(classObjectPsiClass, fqName, classObjectDescriptor);
classObjectDescriptor.setClassData(classObjectData);
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(new PsiClassWrapper(classObjectPsiClass), classObjectData,
Collections.<TypeParameterDescriptor>emptyList()));
setUpClassObjectDescriptor(containing, fqName, classData, getClassObjectName(containing.getName()));
return classObjectDescriptor.getResolverBinaryClassData();
setUpClassObjectDescriptor(containing, fqName, classObjectData, getClassObjectName(containing.getName()));
return classObjectDescriptor;
}
private static boolean hasInnerEnums(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) {
@@ -146,8 +148,11 @@ public final class JavaClassObjectResolver {
@NotNull PsiClass psiClass
) {
FqNameUnsafe fqName = DescriptorResolverUtils.getFqNameForClassObject(psiClass);
ClassDescriptorFromJvmBytecode classObjectDescriptor = new ClassDescriptorFromJvmBytecode(
containing, ClassKind.CLASS_OBJECT, psiClass, null, javaDescriptorResolver);
containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, null, classObjectDescriptor);
classObjectDescriptor.setClassData(classData);
ResolverClassData data = ResolverClassData.createSyntheticClassObjectClassData(psiClass, classObjectDescriptor);
setUpClassObjectDescriptor(containing, fqName, data, getClassObjectName(containing.getName().getName()));
@@ -225,20 +225,21 @@ public final class JavaClassResolver {
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
ClassKind kind = getClassKind(psiClass, jetClassAnnotation);
ClassDescriptorFromJvmBytecode classDescriptor
= new ClassDescriptorFromJvmBytecode(containingDeclaration, kind, psiClass, fqName, javaDescriptorResolver);
= new ClassDescriptorFromJvmBytecode(containingDeclaration, kind, javaDescriptorResolver);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, fqName, classDescriptor);
classDescriptor.setClassData(classData);
ResolverClassData classData = classDescriptor.getResolverBinaryClassData();
cache(javaClassToKotlinFqName(fqName), classDescriptor);
classDescriptor.setName(Name.identifier(psiClass.getName()));
List<JavaSignatureResolver.TypeParameterDescriptorInitialization> typeParameterDescriptorInitializations
= signatureResolver.createUninitializedClassTypeParameters(psiClass, classData);
= signatureResolver.createUninitializedClassTypeParameters(psiClass, classDescriptor);
classDescriptor.setTypeParameterDescriptors(getTypeParametersDescriptors(typeParameterDescriptorInitializations));
List<JetType> supertypes = Lists.newArrayList();
classDescriptor.setSupertypes(supertypes);
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass, jetClassAnnotation));
classDescriptor.setModality(resolveModality(psiClass, classData));
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
classDescriptor.createTypeConstructor();
classDescriptor.setScopeForMemberLookup(new JavaClassMembersScope(semanticServices, classData));
@@ -249,11 +250,9 @@ public final class JavaClassResolver {
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
supertypes.addAll(supertypesResolver.getSupertypes(new PsiClassWrapper(psiClass), classData, classTypeParameters));
ResolverClassData classObjectData = classObjectResolver.createClassObjectDescriptor(classDescriptor, psiClass);
cache(DescriptorResolverUtils.getFqNameForClassObject(psiClass),
classObjectData != null ? classObjectData.getClassDescriptor() : null);
if (classObjectData != null) {
ClassDescriptorFromJvmBytecode classObjectDescriptor = classObjectData.getClassDescriptor();
ClassDescriptorFromJvmBytecode classObjectDescriptor = classObjectResolver.createClassObjectDescriptor(classDescriptor, psiClass);
cache(DescriptorResolverUtils.getFqNameForClassObject(psiClass), classObjectDescriptor);
if (classObjectDescriptor != null) {
classDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor);
}
@@ -286,8 +285,8 @@ public final class JavaClassResolver {
}
@NotNull
private static Modality resolveModality(@NotNull PsiClass psiClass, @NotNull ResolverClassData classData) {
if (classData.getClassDescriptor().getKind() == ClassKind.ANNOTATION_CLASS) {
private static Modality resolveModality(@NotNull PsiClass psiClass, @NotNull ClassDescriptor classDescriptor) {
if (classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
return Modality.FINAL;
}
return Modality.convertFromFlags(
@@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.*;
import org.jetbrains.jet.lang.resolve.java.data.ResolverClassData;
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -325,17 +324,16 @@ public final class JavaSignatureResolver {
public List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(
PsiClass psiClass,
ResolverClassData classData
PsiClass psiClass, ClassDescriptor classDescriptor
) {
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
if (jetClassAnnotation.signature().length() > 0) {
return resolveClassTypeParametersFromJetSignature(
jetClassAnnotation.signature(), psiClass, classData.getClassDescriptor());
jetClassAnnotation.signature(), psiClass, classDescriptor);
}
return makeUninitializedTypeParameters(classData.getClassDescriptor(), psiClass.getTypeParameters());
return makeUninitializedTypeParameters(classDescriptor, psiClass.getTypeParameters());
}