Add method for getting all classifiers with given name from the scope
This commit is contained in:
+7
@@ -160,6 +160,13 @@ public abstract class DeserializedMemberScope implements JetScope {
|
||||
return getClassDescriptor(name);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public final Collection<ClassifierDescriptor> getClassifiers(@NotNull Name name) {
|
||||
ClassifierDescriptor classifier = getClassifier(name);
|
||||
return classifier != null ? Collections.singleton(classifier) : Collections.<ClassifierDescriptor>emptyList();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected abstract ClassifierDescriptor getClassDescriptor(@NotNull Name name);
|
||||
|
||||
|
||||
@@ -244,6 +244,12 @@ public class LazyImportScope implements JetScope {
|
||||
return selectFirstFromImports(name, LookupMode.ONLY_CLASSES, JetScopeSelectorUtil.CLASSIFIER_DESCRIPTOR_SCOPE_SELECTOR);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<ClassifierDescriptor> getClassifiers(@NotNull Name name) {
|
||||
return collectFromImports(name, LookupMode.ONLY_CLASSES, JetScopeSelectorUtil.NAMED_CLASSIFIERS_SCOPE_SELECTOR);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PackageViewDescriptor getPackage(@NotNull Name name) {
|
||||
|
||||
+12
-6
@@ -46,7 +46,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
||||
protected final DP declarationProvider;
|
||||
protected final D thisDescriptor;
|
||||
|
||||
private final MemoizedFunctionToNotNull<Name, List<ClassDescriptor>> classDescriptors;
|
||||
private final MemoizedFunctionToNotNull<Name, List<ClassifierDescriptor>> classDescriptors;
|
||||
|
||||
private final MemoizedFunctionToNotNull<Name, Set<FunctionDescriptor>> functionDescriptors;
|
||||
private final MemoizedFunctionToNotNull<Name, Set<VariableDescriptor>> propertyDescriptors;
|
||||
@@ -63,9 +63,9 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
||||
this.thisDescriptor = thisDescriptor;
|
||||
|
||||
StorageManager storageManager = resolveSession.getStorageManager();
|
||||
this.classDescriptors = storageManager.createMemoizedFunction(new Function1<Name, List<ClassDescriptor>>() {
|
||||
this.classDescriptors = storageManager.createMemoizedFunction(new Function1<Name, List<ClassifierDescriptor>>() {
|
||||
@Override
|
||||
public List<ClassDescriptor> invoke(Name name) {
|
||||
public List<ClassifierDescriptor> invoke(Name name) {
|
||||
return resolveClassDescriptor(name);
|
||||
}
|
||||
});
|
||||
@@ -92,12 +92,12 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private List<ClassDescriptor> resolveClassDescriptor(@NotNull final Name name) {
|
||||
private List<ClassifierDescriptor> resolveClassDescriptor(@NotNull final Name name) {
|
||||
Collection<JetClassOrObject> classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name);
|
||||
|
||||
return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function<JetClassOrObject, ClassDescriptor>() {
|
||||
return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function<JetClassOrObject, ClassifierDescriptor>() {
|
||||
@Override
|
||||
public ClassDescriptor fun(JetClassOrObject classOrObject) {
|
||||
public ClassifierDescriptor fun(JetClassOrObject classOrObject) {
|
||||
return new LazyClassDescriptor(resolveSession, thisDescriptor, name, JetClassInfoUtil.createClassLikeInfo(classOrObject));
|
||||
}
|
||||
});
|
||||
@@ -108,6 +108,12 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
||||
return first(classDescriptors.invoke(name));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<ClassifierDescriptor> getClassifiers(@NotNull Name name) {
|
||||
return classDescriptors.invoke(name);
|
||||
}
|
||||
|
||||
private static <T> T first(@NotNull List<T> list) {
|
||||
if (list.isEmpty()) return null;
|
||||
return list.get(0);
|
||||
|
||||
Reference in New Issue
Block a user