JavaDescriptorResolveData.ResolverScopeData fields are private and accessed via getters

This commit is contained in:
Pavel V. Talanov
2012-10-03 20:47:09 +04:00
parent 93baf78779
commit 1026675d44
7 changed files with 61 additions and 34 deletions
@@ -45,7 +45,7 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
@NotNull ResolverScopeData resolverScopeData) { @NotNull ResolverScopeData resolverScopeData) {
super(semanticServices, resolverScopeData); super(semanticServices, resolverScopeData);
if (resolverScopeData.psiClass == null) { if (resolverScopeData.getPsiClass() == null) {
throw new IllegalArgumentException("must pass PsiClass here"); throw new IllegalArgumentException("must pass PsiClass here");
} }
} }
@@ -79,9 +79,9 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
private ClassifierDescriptor doGetClassifierDescriptor(Name name) { private ClassifierDescriptor doGetClassifierDescriptor(Name name) {
// TODO : suboptimal, walk the list only once // TODO : suboptimal, walk the list only once
for (PsiClass innerClass : resolverScopeData.psiClass.getAllInnerClasses()) { for (PsiClass innerClass : resolverScopeData.getPsiClass().getAllInnerClasses()) {
if (name.getName().equals(innerClass.getName())) { if (name.getName().equals(innerClass.getName())) {
if (innerClass.hasModifierProperty(PsiModifier.STATIC) != resolverScopeData.staticMembers) return null; if (innerClass.hasModifierProperty(PsiModifier.STATIC) != resolverScopeData.isStaticMembers()) return null;
ClassDescriptor classDescriptor = semanticServices.getDescriptorResolver() ClassDescriptor classDescriptor = semanticServices.getDescriptorResolver()
.resolveClass(new FqName(innerClass.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); .resolveClass(new FqName(innerClass.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor != null) { if (classDescriptor != null) {
@@ -53,7 +53,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
@NotNull @NotNull
@Override @Override
public DeclarationDescriptor getContainingDeclaration() { public DeclarationDescriptor getContainingDeclaration() {
return resolverScopeData.classOrNamespaceDescriptor; return resolverScopeData.getClassOrNamespaceDescriptor();
} }
@NotNull @NotNull
@@ -74,7 +74,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
if (allDescriptors == null) { if (allDescriptors == null) {
allDescriptors = Sets.newHashSet(); allDescriptors = Sets.newHashSet();
if (resolverScopeData.psiClass != null) { if (resolverScopeData.getPsiClass() != null) {
ProgressIndicatorProvider.checkCanceled(); ProgressIndicatorProvider.checkCanceled();
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(resolverScopeData)); allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(resolverScopeData));
@@ -85,21 +85,21 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
// TODO: Trying to hack the situation when we produce namespace descriptor for java class and still want to see inner classes // 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) { if (getContainingDeclaration() instanceof JavaNamespaceDescriptor) {
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
resolverScopeData.classOrNamespaceDescriptor, resolverScopeData.psiClass, false)); resolverScopeData.getClassOrNamespaceDescriptor(), resolverScopeData.getPsiClass(), false));
} }
else { else {
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses(
resolverScopeData.classOrNamespaceDescriptor, resolverScopeData.psiClass, resolverScopeData.getClassOrNamespaceDescriptor(), resolverScopeData.getPsiClass(),
resolverScopeData.staticMembers)); resolverScopeData.isStaticMembers()));
} }
} }
if (resolverScopeData.psiPackage != null) { if (resolverScopeData.getPsiPackage() != null) {
FqName packageFqName = resolverScopeData.fqName; FqName packageFqName = resolverScopeData.getFqName();
boolean isKotlinNamespace = packageFqName != null && semanticServices.getKotlinNamespaceDescriptor(packageFqName) != null; boolean isKotlinNamespace = packageFqName != null && semanticServices.getKotlinNamespaceDescriptor(packageFqName) != null;
final JavaDescriptorResolver descriptorResolver = semanticServices.getDescriptorResolver(); final JavaDescriptorResolver descriptorResolver = semanticServices.getDescriptorResolver();
for (PsiPackage psiSubPackage : resolverScopeData.psiPackage.getSubPackages()) { for (PsiPackage psiSubPackage : resolverScopeData.getPsiPackage().getSubPackages()) {
NamespaceDescriptor childNs = descriptorResolver.resolveNamespace( NamespaceDescriptor childNs = descriptorResolver.resolveNamespace(
new FqName(psiSubPackage.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); new FqName(psiSubPackage.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (childNs != null) { if (childNs != null) {
@@ -107,7 +107,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
} }
} }
for (PsiClass psiClass : resolverScopeData.psiPackage.getClasses()) { for (PsiClass psiClass : resolverScopeData.getPsiPackage().getClasses()) {
if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) { if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) {
continue; continue;
} }
@@ -327,7 +327,7 @@ public final class JavaDescriptorPropertiesResolver {
} }
private static boolean isPropertyFinal(ResolverScopeData scopeData, GroupingValue members) { private static boolean isPropertyFinal(ResolverScopeData scopeData, GroupingValue members) {
if (!scopeData.kotlin) { if (!scopeData.isKotlin()) {
return true; return true;
} }
@@ -376,7 +376,7 @@ public final class JavaDescriptorPropertiesResolver {
@NotNull ResolverScopeData scopeData, @NotNull ResolverScopeData scopeData,
boolean isStatic boolean isStatic
) { ) {
final PsiClass psiClass = scopeData.psiClass; final PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null; assert psiClass != null;
boolean isEnum = psiClass.isEnum(); boolean isEnum = psiClass.isEnum();
@@ -35,14 +35,41 @@ import java.util.Map;
class JavaDescriptorResolveData { class JavaDescriptorResolveData {
static abstract class ResolverScopeData { static abstract class ResolverScopeData {
@Nullable @Nullable
final PsiClass psiClass; public PsiClass getPsiClass() {
return psiClass;
}
@Nullable @Nullable
final PsiPackage psiPackage; public PsiPackage getPsiPackage() {
return psiPackage;
}
@Nullable @Nullable
final FqName fqName; public FqName getFqName() {
final boolean staticMembers; return fqName;
final boolean kotlin; }
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
public boolean isStaticMembers() {
return staticMembers;
}
public boolean isKotlin() {
return kotlin;
}
public ClassOrNamespaceDescriptor getClassOrNamespaceDescriptor() {
return classOrNamespaceDescriptor;
}
@Nullable
private final PsiClass psiClass;
@Nullable
private final PsiPackage psiPackage;
@Nullable
private final FqName fqName;
private final boolean staticMembers;
private final boolean kotlin;
private final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @Nullable FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) { protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @Nullable FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) {
JavaDescriptorResolver.checkPsiClassIsNotJet(psiClass); JavaDescriptorResolver.checkPsiClassIsNotJet(psiClass);
@@ -283,7 +283,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
public Collection<ConstructorDescriptor> resolveConstructors(@NotNull ResolverClassData 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.getPsiClass();
ClassDescriptorFromJvmBytecode containingClass = classData.classDescriptor; ClassDescriptorFromJvmBytecode containingClass = classData.classDescriptor;
assert psiClass != null; assert psiClass != null;
@@ -609,7 +609,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
if (result.isEmpty()) { if (result.isEmpty()) {
if (classData.kotlin if (classData.isKotlin()
|| OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName()) || OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName())
// TODO: annotations // TODO: annotations
|| classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) { || classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
@@ -882,7 +882,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) { public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
final PsiClass psiClass = scopeData.psiClass; final PsiClass psiClass = scopeData.getPsiClass();
if (psiClass == null) { if (psiClass == null) {
return Collections.emptySet(); return Collections.emptySet();
} }
@@ -896,7 +896,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
final String qualifiedName = psiClass.getQualifiedName(); final String qualifiedName = psiClass.getQualifiedName();
javaDescriptorPropertiesResolver.resolveNamedGroupProperties( javaDescriptorPropertiesResolver.resolveNamedGroupProperties(
scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, fieldName, scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName,
"class or namespace " + qualifiedName); "class or namespace " + qualifiedName);
return namedMembers.propertyDescriptors; return namedMembers.propertyDescriptors;
@@ -906,7 +906,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) { public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
getResolverScopeData(scopeData); getResolverScopeData(scopeData);
final PsiClass psiClass = scopeData.psiClass; final PsiClass psiClass = scopeData.getPsiClass();
assert psiClass != null; assert psiClass != null;
Set<VariableDescriptor> descriptors = Sets.newHashSet(); Set<VariableDescriptor> descriptors = Sets.newHashSet();
@@ -916,7 +916,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
Name propertyName = entry.getKey(); Name propertyName = entry.getKey();
javaDescriptorPropertiesResolver.resolveNamedGroupProperties( javaDescriptorPropertiesResolver.resolveNamedGroupProperties(
scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, propertyName, scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, propertyName,
"class or namespace " + psiClass.getQualifiedName()); "class or namespace " + psiClass.getQualifiedName());
descriptors.addAll(namedMembers.propertyDescriptors); descriptors.addAll(namedMembers.propertyDescriptors);
} }
@@ -1001,7 +1001,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
NamedMembers namedMembers = namedMembersMap.get(methodName); NamedMembers namedMembers = namedMembersMap.get(methodName);
if (namedMembers != null && namedMembers.methods != null) { if (namedMembers != null && namedMembers.methods != null) {
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, namedMembers, methodName, scopeData); resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(), namedMembers, methodName, scopeData);
return namedMembers.functionDescriptors; return namedMembers.functionDescriptors;
} }
@@ -1055,7 +1055,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
final PsiMethod psiMethod = method.getPsiMethod(); final PsiMethod psiMethod = method.getPsiMethod();
final PsiClass containingClass = psiMethod.getContainingClass(); final PsiClass containingClass = psiMethod.getContainingClass();
if (scopeData.kotlin) { if (scopeData.isKotlin()) {
// TODO: unless maybe class explicitly extends Object // TODO: unless maybe class explicitly extends Object
assert containingClass != null; assert containingClass != null;
String ownerClassName = containingClass.getQualifiedName(); String ownerClassName = containingClass.getQualifiedName();
@@ -1069,7 +1069,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl( SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
scopeData.classOrNamespaceDescriptor, scopeData.getClassOrNamespaceDescriptor(),
resolveAnnotations(psiMethod), resolveAnnotations(psiMethod),
Name.identifier(method.getName()), Name.identifier(method.getName()),
DescriptorKindUtils.flagsToKind(method.getJetMethod().kind()) DescriptorKindUtils.flagsToKind(method.getJetMethod().kind())
@@ -1102,7 +1102,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
functionDescriptorImpl.initialize( functionDescriptorImpl.initialize(
valueParameterDescriptors.receiverType, valueParameterDescriptors.receiverType,
DescriptorUtils.getExpectedThisObjectIfNeeded(scopeData.classOrNamespaceDescriptor), DescriptorUtils.getExpectedThisObjectIfNeeded(scopeData.getClassOrNamespaceDescriptor()),
methodTypeParameters, methodTypeParameters,
valueParameterDescriptors.descriptors, valueParameterDescriptors.descriptors,
returnType, returnType,
@@ -1364,7 +1364,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
for (Map.Entry<Name, NamedMembers> entry : scopeData.getNamedMembersMap().entrySet()) { for (Map.Entry<Name, NamedMembers> entry : scopeData.getNamedMembersMap().entrySet()) {
Name methodName = entry.getKey(); Name methodName = entry.getKey();
NamedMembers namedMembers = entry.getValue(); NamedMembers namedMembers = entry.getValue();
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(),
namedMembers, methodName, scopeData); namedMembers, methodName, scopeData);
functions.addAll(namedMembers.functionDescriptors); functions.addAll(namedMembers.functionDescriptors);
} }
@@ -208,9 +208,9 @@ class JavaDescriptorResolverHelper {
@NotNull @NotNull
static Map<Name, NamedMembers> getNamedMembers(@NotNull ResolverScopeData resolverScopeData) { static Map<Name, NamedMembers> getNamedMembers(@NotNull ResolverScopeData resolverScopeData) {
if (resolverScopeData.psiClass != null) { if (resolverScopeData.getPsiClass() != null) {
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.psiClass), resolverScopeData.staticMembers, resolverScopeData.kotlin); Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.getPsiClass()), resolverScopeData.isStaticMembers(), resolverScopeData.isKotlin());
builder.run(); builder.run();
return builder.namedMembersMap; return builder.namedMembersMap;
} }
@@ -39,7 +39,7 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
super(semanticServices, resolverNamespaceData); super(semanticServices, resolverNamespaceData);
this.packageFQN = packageFQN; this.packageFQN = packageFQN;
if (!resolverNamespaceData.staticMembers) { if (!resolverNamespaceData.isStaticMembers()) {
throw new IllegalArgumentException("instance members should be resolved using " + JavaClassMembersScope.class); throw new IllegalArgumentException("instance members should be resolved using " + JavaClassMembersScope.class);
} }
} }