Extract ResolverClassData as superclass from ResolverBinaryClassData. Use it instead.
This commit is contained in:
+2
-5
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||||
@@ -27,8 +26,6 @@ import org.jetbrains.jet.lang.resolve.lazy.LazyClassDescriptor;
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Stepan Koltsov
|
* @author Stepan Koltsov
|
||||||
@@ -39,7 +36,7 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||||
@NotNull
|
@NotNull
|
||||||
private final JavaDescriptorResolver.ResolverBinaryClassData resolverBinaryClassData;
|
private final JavaDescriptorResolver.ResolverClassData resolverBinaryClassData;
|
||||||
|
|
||||||
|
|
||||||
// lazy
|
// lazy
|
||||||
@@ -55,7 +52,7 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JavaDescriptorResolver.ResolverBinaryClassData getResolverBinaryClassData() {
|
public JavaDescriptorResolver.ResolverClassData getResolverBinaryClassData() {
|
||||||
return resolverBinaryClassData;
|
return resolverBinaryClassData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+39
-19
@@ -148,22 +148,42 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Class with instance members */
|
/** Class with instance members */
|
||||||
static class ResolverBinaryClassData extends ResolverScopeData {
|
static class ResolverBinaryClassData extends ResolverClassData {
|
||||||
final ClassDescriptorFromJvmBytecode classDescriptor;
|
|
||||||
|
|
||||||
ResolverBinaryClassData(@NotNull PsiClass psiClass, @NotNull FqName fqName, @NotNull ClassDescriptorFromJvmBytecode classDescriptor) {
|
ResolverBinaryClassData(@NotNull PsiClass psiClass, @NotNull FqName fqName, @NotNull ClassDescriptorFromJvmBytecode classDescriptor) {
|
||||||
super(psiClass, null, fqName, false, classDescriptor);
|
super(psiClass, null, fqName, false, classDescriptor);
|
||||||
this.classDescriptor = classDescriptor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResolverBinaryClassData(boolean negative) {
|
ResolverBinaryClassData(boolean negative) {
|
||||||
|
super(negative);
|
||||||
|
}
|
||||||
|
|
||||||
|
static final ResolverClassData NEGATIVE = new ResolverBinaryClassData(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class ResolverClassData extends ResolverScopeData {
|
||||||
|
|
||||||
|
final ClassDescriptorFromJvmBytecode classDescriptor;
|
||||||
|
|
||||||
|
List<JavaDescriptorSignatureResolver.TypeParameterDescriptorInitialization> typeParameters;
|
||||||
|
|
||||||
|
protected ResolverClassData(boolean negative) {
|
||||||
super(negative);
|
super(negative);
|
||||||
this.classDescriptor = null;
|
this.classDescriptor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static final ResolverBinaryClassData NEGATIVE = new ResolverBinaryClassData(true);
|
|
||||||
|
|
||||||
List<JavaDescriptorSignatureResolver.TypeParameterDescriptorInitialization> typeParameters;
|
protected ResolverClassData(
|
||||||
|
@Nullable PsiClass psiClass,
|
||||||
|
@Nullable PsiPackage psiPackage,
|
||||||
|
@NotNull FqName fqName,
|
||||||
|
boolean staticMembers,
|
||||||
|
@NotNull ClassDescriptorFromJvmBytecode descriptor
|
||||||
|
) {
|
||||||
|
super(psiClass, psiPackage, fqName, staticMembers, descriptor);
|
||||||
|
classDescriptor = descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ClassDescriptor getClassDescriptor() {
|
public ClassDescriptor getClassDescriptor() {
|
||||||
@@ -203,7 +223,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final Map<FqName, ResolverBinaryClassData> classDescriptorCache = Maps.newHashMap();
|
protected final Map<FqName, ResolverClassData> classDescriptorCache = Maps.newHashMap();
|
||||||
protected final Map<FqName, ResolverNamespaceData> namespaceDescriptorCacheByFqn = Maps.newHashMap();
|
protected final Map<FqName, ResolverNamespaceData> namespaceDescriptorCacheByFqn = Maps.newHashMap();
|
||||||
|
|
||||||
protected Project project;
|
protected Project project;
|
||||||
@@ -297,11 +317,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Not let's take a descriptor of a Java class
|
// Not let's take a descriptor of a Java class
|
||||||
ResolverBinaryClassData classData = classDescriptorCache.get(qualifiedName);
|
ResolverClassData classData = classDescriptorCache.get(qualifiedName);
|
||||||
if (classData == null) {
|
if (classData == null) {
|
||||||
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.THROW);
|
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.THROW);
|
||||||
if (psiClass == null) {
|
if (psiClass == null) {
|
||||||
ResolverBinaryClassData oldValue = classDescriptorCache.put(qualifiedName, ResolverBinaryClassData.NEGATIVE);
|
ResolverClassData oldValue = classDescriptorCache.put(qualifiedName, ResolverBinaryClassData.NEGATIVE);
|
||||||
if (oldValue != null) {
|
if (oldValue != null) {
|
||||||
throw new IllegalStateException("rewrite at " + qualifiedName);
|
throw new IllegalStateException("rewrite at " + qualifiedName);
|
||||||
}
|
}
|
||||||
@@ -313,7 +333,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ResolverBinaryClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List<Runnable> taskList) {
|
private ResolverClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List<Runnable> taskList) {
|
||||||
FqName fqName = new FqName(psiClass.getQualifiedName());
|
FqName fqName = new FqName(psiClass.getQualifiedName());
|
||||||
if (classDescriptorCache.containsKey(fqName)) {
|
if (classDescriptorCache.containsKey(fqName)) {
|
||||||
throw new IllegalStateException(psiClass.getQualifiedName());
|
throw new IllegalStateException(psiClass.getQualifiedName());
|
||||||
@@ -326,7 +346,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(psiClass);
|
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(psiClass);
|
||||||
|
|
||||||
// class may be resolved during resolution of parent
|
// class may be resolved during resolution of parent
|
||||||
ResolverBinaryClassData classData = classDescriptorCache.get(fqName);
|
ResolverClassData classData = classDescriptorCache.get(fqName);
|
||||||
if (classData != null) {
|
if (classData != null) {
|
||||||
return classData;
|
return classData;
|
||||||
}
|
}
|
||||||
@@ -379,7 +399,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<ConstructorDescriptor> resolveConstructors(@NotNull ResolverBinaryClassData classData) {
|
public Collection<ConstructorDescriptor> resolveConstructors(@NotNull ResolverClassData classData) {
|
||||||
Collection<ConstructorDescriptor> constructors = Lists.newArrayList();
|
Collection<ConstructorDescriptor> constructors = Lists.newArrayList();
|
||||||
|
|
||||||
PsiClass psiClass = classData.psiClass;
|
PsiClass psiClass = classData.psiClass;
|
||||||
@@ -473,7 +493,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ConstructorDescriptor resolveConstructor(PsiClass psiClass, ResolverBinaryClassData classData, boolean aStatic, PsiMethod psiConstructor) {
|
private ConstructorDescriptor resolveConstructor(PsiClass psiClass, ResolverClassData classData, boolean aStatic, PsiMethod psiConstructor) {
|
||||||
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
||||||
|
|
||||||
if (constructor.getJetConstructor().hidden()) {
|
if (constructor.getJetConstructor().hidden()) {
|
||||||
@@ -528,7 +548,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
checkPsiClassIsNotJet(psiClass);
|
checkPsiClassIsNotJet(psiClass);
|
||||||
|
|
||||||
FqName fqName = new FqName(classObjectPsiClass.getQualifiedName());
|
FqName fqName = new FqName(classObjectPsiClass.getQualifiedName());
|
||||||
ResolverBinaryClassData classData = new ClassDescriptorFromJvmBytecode(
|
ResolverClassData classData = new ClassDescriptorFromJvmBytecode(
|
||||||
containing, ClassKind.OBJECT, classObjectPsiClass, fqName, this)
|
containing, ClassKind.OBJECT, classObjectPsiClass, fqName, this)
|
||||||
.getResolverBinaryClassData();
|
.getResolverBinaryClassData();
|
||||||
|
|
||||||
@@ -573,7 +593,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return ns;
|
return ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Collection<JetType> getSupertypes(PsiClassWrapper psiClass, ResolverBinaryClassData classData, List<TypeParameterDescriptor> typeParameters) {
|
private Collection<JetType> getSupertypes(PsiClassWrapper psiClass, ResolverClassData classData, List<TypeParameterDescriptor> typeParameters) {
|
||||||
ClassDescriptor classDescriptor = classData.classDescriptor;
|
ClassDescriptor classDescriptor = classData.classDescriptor;
|
||||||
|
|
||||||
final List<JetType> result = new ArrayList<JetType>();
|
final List<JetType> result = new ArrayList<JetType>();
|
||||||
@@ -1514,8 +1534,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Collection<JetType> getSupertypes(ResolverScopeData scope) {
|
private Collection<JetType> getSupertypes(ResolverScopeData scope) {
|
||||||
if (scope instanceof ResolverBinaryClassData) {
|
if (scope instanceof ResolverClassData) {
|
||||||
return ((ResolverBinaryClassData) scope).classDescriptor.getSupertypes();
|
return ((ResolverClassData) scope).classDescriptor.getSupertypes();
|
||||||
}
|
}
|
||||||
else if (scope instanceof ResolverNamespaceData) {
|
else if (scope instanceof ResolverNamespaceData) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -1526,8 +1546,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TypeSubstitutor typeSubstitutorForGenericSupertypes(ResolverScopeData scopeData) {
|
private TypeSubstitutor typeSubstitutorForGenericSupertypes(ResolverScopeData scopeData) {
|
||||||
if (scopeData instanceof ResolverBinaryClassData) {
|
if (scopeData instanceof ResolverClassData) {
|
||||||
return createSubstitutorForGenericSupertypes(((ResolverBinaryClassData) scopeData).getClassDescriptor());
|
return createSubstitutorForGenericSupertypes(((ResolverClassData) scopeData).getClassDescriptor());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return TypeSubstitutor.EMPTY;
|
return TypeSubstitutor.EMPTY;
|
||||||
|
|||||||
+2
-6
@@ -17,11 +17,7 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.java;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.PsiClassType;
|
|
||||||
import com.intellij.psi.PsiMethod;
|
|
||||||
import com.intellij.psi.PsiTypeParameter;
|
|
||||||
import com.intellij.psi.PsiTypeParameterListOwner;
|
|
||||||
import jet.typeinfo.TypeInfoVariance;
|
import jet.typeinfo.TypeInfoVariance;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -318,7 +314,7 @@ public class JavaDescriptorSignatureResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(PsiClass psiClass, JavaDescriptorResolver.ResolverBinaryClassData classData) {
|
List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(PsiClass psiClass, JavaDescriptorResolver.ResolverClassData classData) {
|
||||||
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
||||||
|
|
||||||
if (jetClassAnnotation.signature().length() > 0) {
|
if (jetClassAnnotation.signature().length() > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user