Check for ClassKind in getClassifier() and getObjectDescriptor() implementations in java scopes

# KT-3124 fixed
This commit is contained in:
Pavel V. Talanov
2012-12-05 20:53:02 +04:00
parent 0fea6822c3
commit ad848f2ebc
7 changed files with 57 additions and 20 deletions
@@ -32,7 +32,7 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
@NotNull
protected final ClassPsiDeclarationProvider declarationProvider;
private Map<Name, ClassifierDescriptor> classifiersMap = null;
private Map<Name, ClassDescriptor> innerClassesMap = null;
protected JavaClassMembersScope(
@NotNull ClassOrNamespaceDescriptor descriptor,
@@ -56,21 +56,16 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
return getResolver().resolveFunctionGroup(name, declarationProvider, descriptor);
}
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
return getClassifiersMap().get(name);
}
@NotNull
private Map<Name, ClassifierDescriptor> getClassifiersMap() {
if (classifiersMap == null) {
private Map<Name, ClassDescriptor> getInnerClassesMap() {
if (innerClassesMap == null) {
Collection<ClassDescriptor> innerClasses = getInnerClasses();
classifiersMap = new HashMap<Name, ClassifierDescriptor>();
innerClassesMap = new HashMap<Name, ClassDescriptor>();
for (ClassDescriptor innerClass : innerClasses) {
classifiersMap.put(innerClass.getName(), innerClass);
innerClassesMap.put(innerClass.getName(), innerClass);
}
}
return classifiersMap;
return innerClassesMap;
}
@NotNull
@@ -78,4 +73,22 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
protected Collection<ClassDescriptor> computeInnerClasses() {
return getResolver().resolveInnerClasses(descriptor, declarationProvider);
}
@Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
ClassDescriptor innerClass = getInnerClassesMap().get(name);
if (innerClass != null && innerClass.getKind().isObject()) {
return innerClass;
}
return null;
}
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassDescriptor innerClass = getInnerClassesMap().get(name);
if (innerClass == null || innerClass.getKind().isObject()) {
return null;
}
return innerClass;
}
}
@@ -39,12 +39,6 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
this.packageFQN = packageFQN;
}
@Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
//TODO: check that class is an object
return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
}
@Override
public NamespaceDescriptor getNamespace(@NotNull Name name) {
return getResolver().resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN);
@@ -52,13 +52,22 @@ public abstract class JavaPackageScope extends JavaBaseScope {
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
ClassDescriptor classDescriptor =
getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor == null || classDescriptor.getKind().isObject()) {
return null;
}
return classDescriptor;
}
@Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
//TODO: check that class is an object
return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
ClassDescriptor classDescriptor =
getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor != null && classDescriptor.getKind().isObject()) {
return classDescriptor;
}
return null;
}
@Override