diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java index 99c18cdf092..fecb5bc12ed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.lazy; import com.google.common.collect.Lists; +import com.intellij.util.containers.Predicate; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; @@ -41,19 +42,33 @@ public class ResolveSessionUtils { // The name contains a GUID to avoid clashes, if a clash happens, it's not a big deal: the code does not compile anyway public static final Name NO_NAME_FOR_LAZY_RESOLVE = Name.identifier("no_name_in_PSI_for_lazy_resolve_3d19d79d_1ba9_4cd0_b7f5_b46aa3cd5d40"); + public static final Predicate NON_SINGLETON_FILTER = new Predicate() { + @Override + public boolean apply(ClassDescriptor descriptor) { + return !descriptor.getKind().isSingleton(); + } + }; + + public static final Predicate SINGLETON_FILTER = new Predicate() { + @Override + public boolean apply(ClassDescriptor descriptor) { + return descriptor.getKind().isSingleton(); + } + }; + private ResolveSessionUtils() { } @NotNull public static Collection getClassDescriptorsByFqName(@NotNull KotlinCodeAnalyzer analyzer, @NotNull FqName fqName) { - return getClassOrObjectDescriptorsByFqName(analyzer, fqName, false); + return getClassOrObjectDescriptorsByFqName(analyzer, fqName, NON_SINGLETON_FILTER); } @NotNull public static Collection getClassOrObjectDescriptorsByFqName( @NotNull KotlinCodeAnalyzer analyzer, @NotNull FqName fqName, - boolean includeObjectDeclarations + @NotNull Predicate filter ) { if (fqName.isRoot()) { return Collections.emptyList(); @@ -66,8 +81,7 @@ public class ResolveSessionUtils { PackageViewDescriptor packageDescriptor = analyzer.getModuleDescriptor().getPackage(packageFqName); if (packageDescriptor != null) { FqName classInPackagePath = new FqName(QualifiedNamesUtil.tail(packageFqName, fqName)); - Collection descriptors = getClassOrObjectDescriptorsByFqName(packageDescriptor, classInPackagePath, - includeObjectDeclarations); + Collection descriptors = getClassOrObjectDescriptorsByFqName(packageDescriptor, classInPackagePath, filter); classDescriptors.addAll(descriptors); } @@ -86,7 +100,7 @@ public class ResolveSessionUtils { private static Collection getClassOrObjectDescriptorsByFqName( @NotNull PackageViewDescriptor packageDescriptor, @NotNull FqName path, - boolean includeObjectDeclarations + @NotNull Predicate filter ) { if (path.isRoot()) { return Collections.emptyList(); @@ -112,8 +126,7 @@ public class ResolveSessionUtils { Collection resultClassifierDescriptors = Lists.newArrayList(); for (JetScope scope : scopes) { ClassifierDescriptor classifier = scope.getClassifier(shortName); - if (classifier instanceof ClassDescriptor && - includeObjectDeclarations == ((ClassDescriptor) classifier).getKind().isSingleton()) { + if (classifier instanceof ClassDescriptor && filter.apply((ClassDescriptor) classifier)) { resultClassifierDescriptors.add((ClassDescriptor) classifier); } } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java index aee4bc0489f..8c64c38a008 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java @@ -197,7 +197,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { for (JetObjectDeclaration objectDeclaration : topObjects) { FqName fqName = JetPsiUtil.getFQName(objectDeclaration); assert fqName != null : "Local object declaration in JetTopLevelShortObjectNameIndex:" + objectDeclaration.getText(); - result.addAll(ResolveSessionUtils.getClassOrObjectDescriptorsByFqName(resolveSession, fqName, true)); + result.addAll(ResolveSessionUtils.getClassOrObjectDescriptorsByFqName(resolveSession, fqName, ResolveSessionUtils.SINGLETON_FILTER)); } for (PsiClass psiClass : JetFromJavaDescriptorHelper @@ -205,7 +205,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { String qualifiedName = psiClass.getQualifiedName(); if (qualifiedName != null) { FqName fqName = new FqName(qualifiedName); - result.addAll(ResolveSessionUtils.getClassOrObjectDescriptorsByFqName(resolveSession, fqName, true)); + result.addAll(ResolveSessionUtils.getClassOrObjectDescriptorsByFqName(resolveSession, fqName, ResolveSessionUtils.SINGLETON_FILTER)); } }