Refactor: eliminate remaining usages of ResolverScopeData#getClassOrNamespaceDescriptor()

This commit is contained in:
Pavel V. Talanov
2012-11-04 21:25:50 +04:00
parent f5cd36a9d2
commit 44031be74c
12 changed files with 55 additions and 50 deletions
@@ -130,8 +130,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
}
@NotNull
public Set<VariableDescriptor> resolveFieldGroupByName(Name name, ResolverScopeData data) {
return propertiesResolver.resolveFieldGroupByName(name, data);
public Set<VariableDescriptor> resolveFieldGroupByName(
@NotNull Name name,
@NotNull ResolverScopeData data,
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
) {
return propertiesResolver.resolveFieldGroupByName(name, data, ownerDescriptor);
}
@Nullable
@@ -160,8 +164,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
}
@NotNull
public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull Name methodName, @NotNull ResolverScopeData scopeData) {
return functionResolver.resolveFunctionGroup(methodName, scopeData);
public Set<FunctionDescriptor> resolveFunctionGroup(
@NotNull Name methodName,
@NotNull ResolverScopeData scopeData,
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
) {
return functionResolver.resolveFunctionGroup(methodName, scopeData, ownerDescriptor);
}
@NotNull
@@ -20,7 +20,6 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
import org.jetbrains.jet.lang.resolve.name.FqName;
/**
@@ -32,25 +31,22 @@ public class ResolverClassData extends ResolverScopeData {
@Nullable PsiClass psiClass,
@Nullable PsiPackage psiPackage,
@Nullable FqName fqName,
boolean staticMembers,
@NotNull ClassDescriptorFromJvmBytecode descriptor
boolean staticMembers
) {
super(psiClass, psiPackage, fqName, staticMembers, descriptor);
super(psiClass, psiPackage, fqName, staticMembers);
}
@NotNull
public static ResolverClassData createSyntheticClassObjectClassData(
@Nullable PsiClass psiClass,
@NotNull ClassDescriptorFromJvmBytecode descriptor
@Nullable PsiClass psiClass
) {
return new ResolverClassData(psiClass, null, null, true, descriptor);
return new ResolverClassData(psiClass, null, null, true);
}
public static ResolverClassData createBinaryClassData(
@NotNull PsiClass psiClass,
@Nullable FqName fqName,
@NotNull ClassDescriptorFromJvmBytecode classDescriptor
@Nullable FqName fqName
) {
return new ResolverClassData(psiClass, null, fqName, false, classDescriptor);
return new ResolverClassData(psiClass, null, fqName, false);
}
}
@@ -20,7 +20,6 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
/**
@@ -31,9 +30,8 @@ public class ResolverNamespaceData extends ResolverScopeData {
public ResolverNamespaceData(
@Nullable PsiClass psiClass,
@Nullable PsiPackage psiPackage,
@NotNull FqName fqName,
@NotNull NamespaceDescriptor namespaceDescriptor
@NotNull FqName fqName
) {
super(psiClass, psiPackage, fqName, true, namespaceDescriptor);
super(psiClass, psiPackage, fqName, true);
}
}
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.MembersCache;
@@ -55,10 +54,6 @@ public abstract class ResolverScopeData {
return kotlin;
}
public ClassOrNamespaceDescriptor getClassOrNamespaceDescriptor() {
return classOrNamespaceDescriptor;
}
@Nullable
private final PsiClass psiClass;
@Nullable
@@ -67,14 +62,12 @@ public abstract class ResolverScopeData {
private final FqName fqName;
private final boolean staticMembers;
private final boolean kotlin;
private final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
public ResolverScopeData(
@Nullable PsiClass psiClass,
@Nullable PsiPackage psiPackage,
@Nullable FqName fqName,
boolean staticMembers,
@NotNull ClassOrNamespaceDescriptor descriptor
boolean staticMembers
) {
DescriptorResolverUtils.checkPsiClassIsNotJet(psiClass);
@@ -88,7 +81,6 @@ public abstract class ResolverScopeData {
this.staticMembers = staticMembers;
this.kotlin = psiClass != null && DescriptorResolverUtils.isKotlinClass(psiClass);
classOrNamespaceDescriptor = descriptor;
if (fqName != null && fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && kotlin) {
throw new IllegalStateException("Kotlin namespace cannot have last segment " + JvmAbi.PACKAGE_CLASS + ": " + fqName);
@@ -112,7 +112,7 @@ public final class JavaClassObjectResolver {
FqName fqName = new FqName(qualifiedName);
ClassDescriptorFromJvmBytecode classObjectDescriptor
= new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver);
ResolverClassData classObjectData = ResolverClassData.createBinaryClassData(classObjectPsiClass, fqName, classObjectDescriptor);
ResolverClassData classObjectData = ResolverClassData.createBinaryClassData(classObjectPsiClass, fqName);
classObjectDescriptor.setClassData(classObjectData);
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(classObjectDescriptor, new PsiClassWrapper(classObjectPsiClass), classObjectData,
Collections.<TypeParameterDescriptor>emptyList()
@@ -153,10 +153,10 @@ public final class JavaClassObjectResolver {
ClassDescriptorFromJvmBytecode classObjectDescriptor = new ClassDescriptorFromJvmBytecode(
containing, ClassKind.CLASS_OBJECT, javaDescriptorResolver);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, null, classObjectDescriptor);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, null);
classObjectDescriptor.setClassData(classData);
ResolverClassData data = ResolverClassData.createSyntheticClassObjectClassData(psiClass, classObjectDescriptor);
ResolverClassData data = ResolverClassData.createSyntheticClassObjectClassData(psiClass);
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, data, getClassObjectName(containing.getName().getName()));
return classObjectDescriptor;
@@ -174,7 +174,7 @@ public final class JavaClassObjectResolver {
classObjectDescriptor.setVisibility(containing.getVisibility());
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
classObjectDescriptor.createTypeConstructor();
JavaClassMembersScope classMembersScope = new JavaClassMembersScope(semanticServices, data);
JavaClassMembersScope classMembersScope = new JavaClassMembersScope(classObjectDescriptor, semanticServices, data);
WritableScopeImpl writableScope =
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, fqName.toString());
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
@@ -226,7 +226,7 @@ public final class JavaClassResolver {
ClassKind kind = getClassKind(psiClass, jetClassAnnotation);
ClassDescriptorFromJvmBytecode classDescriptor
= new ClassDescriptorFromJvmBytecode(containingDeclaration, kind, javaDescriptorResolver);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, fqName, classDescriptor);
ResolverClassData classData = ResolverClassData.createBinaryClassData(psiClass, fqName);
classDescriptor.setClassData(classData);
cache(javaClassToKotlinFqName(fqName), classDescriptor);
@@ -241,7 +241,7 @@ public final class JavaClassResolver {
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass, jetClassAnnotation));
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
classDescriptor.createTypeConstructor();
classDescriptor.setScopeForMemberLookup(new JavaClassMembersScope(semanticServices, classData));
classDescriptor.setScopeForMemberLookup(new JavaClassMembersScope(classDescriptor, semanticServices, classData));
String context = "class " + psiClass.getQualifiedName();
signatureResolver.initializeTypeParameters(typeParameterDescriptorInitializations, classDescriptor, context);
@@ -220,7 +220,11 @@ public final class JavaFunctionResolver {
}
@NotNull
public Set<FunctionDescriptor> resolveFunctionGroup(Name methodName, ResolverScopeData scopeData) {
public Set<FunctionDescriptor> resolveFunctionGroup(
@NotNull Name methodName,
@NotNull ResolverScopeData scopeData,
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
) {
MembersCache namedMembersMap = scopeData.getMembersCache();
NamedMembers namedMembers = namedMembersMap.get(methodName);
@@ -229,7 +233,7 @@ public final class JavaFunctionResolver {
}
PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null;
return resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), psiClass, namedMembers, methodName, scopeData);
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName, scopeData);
}
@NotNull
@@ -137,7 +137,7 @@ public final class JavaNamespaceResolver {
javaPackageScope = null;
}
else {
javaPackageScope = new JavaPackageScope(fqName, javaSemanticServices, namespaceData);
javaPackageScope = new JavaPackageScope(namespaceDescriptor, fqName, javaSemanticServices, namespaceData);
}
cache(fqName, javaPackageScope);
@@ -170,7 +170,7 @@ public final class JavaNamespaceResolver {
return null;
}
return new ResolverNamespaceData(psiClass, psiPackage, fqName, namespaceDescriptor);
return new ResolverNamespaceData(psiClass, psiPackage, fqName);
}
private void cache(@NotNull FqName fqName, @Nullable JavaPackageScope packageScope) {
@@ -83,7 +83,8 @@ public final class JavaPropertyResolver {
@NotNull
public Set<VariableDescriptor> resolveFieldGroupByName(
@NotNull Name fieldName,
@NotNull ResolverScopeData scopeData
@NotNull ResolverScopeData scopeData,
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
) {
PsiClass psiClass = scopeData.getPsiClass();
@@ -95,7 +96,7 @@ public final class JavaPropertyResolver {
//noinspection ConstantConditions
String qualifiedName = psiClass == null ? scopeData.getPsiPackage().getQualifiedName() : psiClass.getQualifiedName();
return resolveNamedGroupProperties(scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName,
return resolveNamedGroupProperties(ownerDescriptor, scopeData, namedMembers, fieldName,
"class or namespace " + qualifiedName);
}
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
@@ -55,20 +56,23 @@ public abstract class JavaBaseScope extends JetScopeImpl {
private final Map<Name, Set<VariableDescriptor>> propertyDescriptors = Maps.newHashMap();
@Nullable
private Collection<DeclarationDescriptor> allDescriptors = null;
@NotNull
private final ClassOrNamespaceDescriptor descriptor;
protected JavaBaseScope(
@NotNull ClassOrNamespaceDescriptor descriptor,
@NotNull JavaSemanticServices semanticServices,
@NotNull ResolverScopeData resolverScopeData
) {
this.semanticServices = semanticServices;
this.resolverScopeData = resolverScopeData;
this.descriptor = descriptor;
}
@NotNull
@Override
public DeclarationDescriptor getContainingDeclaration() {
return resolverScopeData.getClassOrNamespaceDescriptor();
return descriptor;
}
@NotNull
@@ -88,7 +92,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull
private Set<VariableDescriptor> computePropertyDescriptors(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, resolverScopeData);
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, resolverScopeData, descriptor);
}
@NotNull
@@ -108,7 +112,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull
private Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFunctionGroup(name, resolverScopeData);
return semanticServices.getDescriptorResolver().resolveFunctionGroup(name, resolverScopeData, descriptor);
}
@NotNull
@@ -158,14 +162,12 @@ public abstract class JavaBaseScope extends JetScopeImpl {
@NotNull Collection<DeclarationDescriptor> result
) {
// TODO: Trying to hack the situation when we produce namespace descriptor for java class and still want to see inner classes
if (getContainingDeclaration() instanceof JavaNamespaceDescriptor) {
result.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
resolverScopeData.getClassOrNamespaceDescriptor(), psiClass, false));
if (descriptor instanceof JavaNamespaceDescriptor) {
result.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(descriptor, psiClass, false));
}
else {
result.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
resolverScopeData.getClassOrNamespaceDescriptor(), psiClass,
resolverScopeData.isStaticMembers()));
descriptor, psiClass, resolverScopeData.isStaticMembers()));
}
}
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
@@ -42,9 +43,10 @@ public class JavaClassMembersScope extends JavaBaseScope {
private final Map<Name, ClassifierDescriptor> classifiers = Maps.newHashMap();
public JavaClassMembersScope(
@NotNull ClassOrNamespaceDescriptor descriptor,
@NotNull JavaSemanticServices semanticServices,
@NotNull ResolverScopeData resolverScopeData) {
super(semanticServices, resolverScopeData);
super(descriptor, semanticServices, resolverScopeData);
if (resolverScopeData.getPsiClass() == null) {
throw new IllegalArgumentException("must pass PsiClass here");
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve.java.scope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
@@ -35,10 +36,11 @@ public class JavaPackageScope extends JavaBaseScope {
private final FqName packageFQN;
public JavaPackageScope(
@NotNull ClassOrNamespaceDescriptor descriptor,
@NotNull FqName packageFQN,
@NotNull JavaSemanticServices semanticServices,
@NotNull ResolverScopeData resolverNamespaceData) {
super(semanticServices, resolverNamespaceData);
super(descriptor, semanticServices, resolverNamespaceData);
this.packageFQN = packageFQN;
if (!resolverNamespaceData.isStaticMembers()) {