Check for ClassKind in getClassifier() and getObjectDescriptor() implementations in java scopes
# KT-3124 fixed
This commit is contained in:
+24
-11
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
-6
@@ -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);
|
||||
|
||||
+12
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user