Refactor ClassDescriptorFromJvmBytecode: remove ClassDescriptorFromJvmBytecode#getResolverBinaryClassData
This commit is contained in:
+9
-13
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+18
-13
@@ -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()));
|
||||
|
||||
+10
-11
@@ -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(
|
||||
|
||||
+3
-5
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user