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