Refactor: move ClassDescriptorFromJvmBytecode#getConstructors() logic to JavaClassNonStaticMembersScope
This commit is contained in:
@@ -112,7 +112,6 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
||||
javaClassResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setPsiClassFinder(psiClassFinder);
|
||||
javaClassResolver.setSemanticServices(javaSemanticServices);
|
||||
@@ -126,7 +125,6 @@ public class InjectorForJavaDescriptorResolver {
|
||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||
|
||||
javaClassObjectResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassObjectResolver.setTrace(bindingTrace);
|
||||
|
||||
@@ -110,7 +110,6 @@ public class InjectorForJavaSemanticServices {
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
||||
javaClassResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setPsiClassFinder(psiClassFinder);
|
||||
javaClassResolver.setSemanticServices(javaSemanticServices);
|
||||
@@ -124,7 +123,6 @@ public class InjectorForJavaSemanticServices {
|
||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||
|
||||
javaClassObjectResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassObjectResolver.setTrace(bindingTrace);
|
||||
|
||||
@@ -275,7 +275,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
||||
javaClassResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setPsiClassFinder(psiClassFinder);
|
||||
javaClassResolver.setSemanticServices(javaSemanticServices);
|
||||
@@ -289,7 +288,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||
|
||||
javaClassObjectResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassObjectResolver.setTrace(bindingTrace);
|
||||
|
||||
+1
-2
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
||||
@@ -109,7 +108,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
|
||||
@NotNull
|
||||
public Collection<ConstructorDescriptor> resolveConstructors(
|
||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptorFromJvmBytecode classDescriptor
|
||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptor classDescriptor
|
||||
) {
|
||||
return constructorResolver.resolveConstructors(classData, classDescriptor);
|
||||
}
|
||||
|
||||
+11
-19
@@ -21,8 +21,7 @@ import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.MutableClassDescriptorLite;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.LazyClassDescriptor;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -33,32 +32,25 @@ import java.util.Collection;
|
||||
* @see LazyClassDescriptor
|
||||
*/
|
||||
public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
|
||||
@NotNull
|
||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||
|
||||
@NotNull
|
||||
private final ClassPsiDeclarationProvider resolverBinaryClassData;
|
||||
|
||||
|
||||
// lazy
|
||||
private Collection<ConstructorDescriptor> constructors;
|
||||
private JavaClassNonStaticMembersScope scopeForConstructorResolve;
|
||||
|
||||
public ClassDescriptorFromJvmBytecode(
|
||||
@NotNull DeclarationDescriptor containingDeclaration, @NotNull ClassKind kind,
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||
@NotNull ClassPsiDeclarationProvider data
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@NotNull ClassKind kind
|
||||
) {
|
||||
super(containingDeclaration, kind);
|
||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||
this.resolverBinaryClassData = data;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<ConstructorDescriptor> getConstructors() {
|
||||
if (constructors == null) {
|
||||
this.constructors = javaDescriptorResolver.resolveConstructors(resolverBinaryClassData, this);
|
||||
}
|
||||
return constructors;
|
||||
assert scopeForConstructorResolve != null;
|
||||
return scopeForConstructorResolve.getConstructors();
|
||||
}
|
||||
|
||||
public void setScopeForConstructorResolve(@NotNull JavaClassNonStaticMembersScope scopeForConstructorResolve) {
|
||||
this.scopeForConstructorResolve = scopeForConstructorResolve;
|
||||
}
|
||||
}
|
||||
|
||||
+9
-21
@@ -25,13 +25,11 @@ import org.jetbrains.jet.lang.descriptors.Modality;
|
||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassMembersScope;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -52,7 +50,6 @@ import static org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils.isInne
|
||||
|
||||
public final class JavaClassObjectResolver {
|
||||
|
||||
private JavaDescriptorResolver javaDescriptorResolver;
|
||||
private BindingTrace trace;
|
||||
private JavaSemanticServices semanticServices;
|
||||
private JavaSupertypeResolver supertypesResolver;
|
||||
@@ -62,11 +59,6 @@ public final class JavaClassObjectResolver {
|
||||
this.supertypesResolver = supertypesResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setJavaDescriptorResolver(JavaDescriptorResolver javaDescriptorResolver) {
|
||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTrace(BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
@@ -114,12 +106,12 @@ public final class JavaClassObjectResolver {
|
||||
FqName fqName = new FqName(qualifiedName);
|
||||
ClassPsiDeclarationProvider classObjectData = PsiDeclarationProviderFactory.createBinaryClassData(classObjectPsiClass);
|
||||
ClassDescriptorFromJvmBytecode classObjectDescriptor
|
||||
= new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver, classObjectData);
|
||||
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(classObjectDescriptor, new PsiClassWrapper(classObjectPsiClass), classObjectData,
|
||||
Collections.<TypeParameterDescriptor>emptyList()
|
||||
));
|
||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, classObjectData, getClassObjectName(containing.getName())
|
||||
);
|
||||
= new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT);
|
||||
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(classObjectDescriptor,
|
||||
new PsiClassWrapper(classObjectPsiClass),
|
||||
classObjectData,
|
||||
Collections.<TypeParameterDescriptor>emptyList()));
|
||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, classObjectData, getClassObjectName(containing.getName()));
|
||||
return classObjectDescriptor;
|
||||
}
|
||||
|
||||
@@ -151,14 +143,9 @@ public final class JavaClassObjectResolver {
|
||||
@NotNull PsiClass psiClass
|
||||
) {
|
||||
FqNameUnsafe fqName = DescriptorResolverUtils.getFqNameForClassObject(psiClass);
|
||||
|
||||
ClassPsiDeclarationProvider classData = PsiDeclarationProviderFactory.createBinaryClassData(psiClass);
|
||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = new ClassDescriptorFromJvmBytecode(
|
||||
containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver, classData);
|
||||
|
||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT);
|
||||
ClassPsiDeclarationProvider data = PsiDeclarationProviderFactory.createSyntheticClassObjectClassData(psiClass);
|
||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, data, getClassObjectName(containing.getName().getName()));
|
||||
|
||||
return classObjectDescriptor;
|
||||
}
|
||||
|
||||
@@ -174,11 +161,12 @@ public final class JavaClassObjectResolver {
|
||||
classObjectDescriptor.setVisibility(containing.getVisibility());
|
||||
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
||||
classObjectDescriptor.createTypeConstructor();
|
||||
JavaClassMembersScope classMembersScope = new JavaClassNonStaticMembersScope(classObjectDescriptor, data, semanticServices);
|
||||
JavaClassNonStaticMembersScope classMembersScope = new JavaClassNonStaticMembersScope(classObjectDescriptor, data, semanticServices);
|
||||
WritableScopeImpl writableScope =
|
||||
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, fqName.toString());
|
||||
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
||||
classObjectDescriptor.setScopeForConstructorResolve(classMembersScope);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+5
-11
@@ -73,7 +73,6 @@ public final class JavaClassResolver {
|
||||
private final Set<FqNameBase> unresolvedCache = Sets.newHashSet();
|
||||
|
||||
private BindingTrace trace;
|
||||
private JavaDescriptorResolver javaDescriptorResolver;
|
||||
private JavaSignatureResolver signatureResolver;
|
||||
private JavaSemanticServices semanticServices;
|
||||
private JavaAnnotationResolver annotationResolver;
|
||||
@@ -90,11 +89,6 @@ public final class JavaClassResolver {
|
||||
this.trace = trace;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setJavaDescriptorResolver(JavaDescriptorResolver javaDescriptorResolver) {
|
||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setSignatureResolver(JavaSignatureResolver signatureResolver) {
|
||||
this.signatureResolver = signatureResolver;
|
||||
@@ -226,8 +220,7 @@ public final class JavaClassResolver {
|
||||
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
||||
ClassKind kind = getClassKind(psiClass, jetClassAnnotation);
|
||||
ClassPsiDeclarationProvider classData = PsiDeclarationProviderFactory.createBinaryClassData(psiClass);
|
||||
ClassDescriptorFromJvmBytecode classDescriptor
|
||||
= new ClassDescriptorFromJvmBytecode(containingDeclaration, kind, javaDescriptorResolver, classData);
|
||||
ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(containingDeclaration, kind);
|
||||
|
||||
cache(javaClassToKotlinFqName(fqName), classDescriptor);
|
||||
classDescriptor.setName(Name.identifier(psiClass.getName()));
|
||||
@@ -241,15 +234,16 @@ public final class JavaClassResolver {
|
||||
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass, jetClassAnnotation));
|
||||
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
|
||||
classDescriptor.createTypeConstructor();
|
||||
classDescriptor.setScopeForMemberLookup(new JavaClassNonStaticMembersScope(classDescriptor, classData, semanticServices));
|
||||
JavaClassNonStaticMembersScope membersScope = new JavaClassNonStaticMembersScope(classDescriptor, classData, semanticServices);
|
||||
classDescriptor.setScopeForMemberLookup(membersScope);
|
||||
classDescriptor.setScopeForConstructorResolve(membersScope);
|
||||
|
||||
String context = "class " + psiClass.getQualifiedName();
|
||||
signatureResolver.initializeTypeParameters(typeParameterDescriptorInitializations, classDescriptor, context);
|
||||
|
||||
// TODO: ugly hack: tests crash if initializeTypeParameters called with class containing proper supertypes
|
||||
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
|
||||
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classData, classTypeParameters
|
||||
));
|
||||
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classData, classTypeParameters));
|
||||
|
||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = classObjectResolver.createClassObjectDescriptor(classDescriptor, psiClass);
|
||||
cache(DescriptorResolverUtils.getFqNameForClassObject(psiClass), classObjectDescriptor);
|
||||
|
||||
+2
-3
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
@@ -63,7 +62,7 @@ public final class JavaConstructorResolver {
|
||||
|
||||
@NotNull
|
||||
public Collection<ConstructorDescriptor> resolveConstructors(
|
||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptorFromJvmBytecode containingClass
|
||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptor containingClass
|
||||
) {
|
||||
Collection<ConstructorDescriptor> constructors = Lists.newArrayList();
|
||||
|
||||
@@ -164,7 +163,7 @@ public final class JavaConstructorResolver {
|
||||
PsiClass psiClass,
|
||||
boolean aStatic,
|
||||
PsiMethod psiConstructor,
|
||||
ClassDescriptorFromJvmBytecode classDescriptor
|
||||
ClassDescriptor classDescriptor
|
||||
) {
|
||||
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
||||
|
||||
|
||||
+14
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiModifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
@@ -36,12 +37,17 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
||||
@NotNull
|
||||
private final Map<Name, ClassifierDescriptor> classifiers = Maps.newHashMap();
|
||||
|
||||
private Collection<ConstructorDescriptor> constructors = null;
|
||||
@NotNull
|
||||
private final ClassDescriptor descriptor;
|
||||
|
||||
public JavaClassNonStaticMembersScope(
|
||||
@NotNull ClassDescriptor descriptor,
|
||||
@NotNull ClassPsiDeclarationProvider psiDeclarationProvider,
|
||||
@NotNull JavaSemanticServices semanticServices
|
||||
) {
|
||||
super(descriptor, psiDeclarationProvider, semanticServices);
|
||||
this.descriptor = descriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,6 +78,14 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public Collection<ConstructorDescriptor> getConstructors() {
|
||||
if (constructors == null) {
|
||||
this.constructors = getResolver().resolveConstructors(declarationProvider, descriptor);
|
||||
}
|
||||
return constructors;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected Collection<ClassDescriptor> computeInnerClasses() {
|
||||
|
||||
Reference in New Issue
Block a user