From b08e444aa035d541eb8665de74a969329aa6ded6 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 30 Oct 2014 22:06:37 +0300 Subject: [PATCH] LazyPackageFragmentScopeForJavaPackage uses name filter in getDescriptors() for classes --- .../java/structure/impl/JavaPackageImpl.kt | 13 ++++++++----- .../lazy/descriptors/LazyJavaClassMemberScope.kt | 4 ++-- .../java/lazy/descriptors/LazyJavaMemberScope.kt | 12 +++++++----- .../java/lazy/descriptors/LazyJavaStaticScope.kt | 10 +++++----- .../java/resolver/DescriptorResolverUtils.java | 16 ---------------- .../lang/resolve/java/structure/JavaPackage.kt | 6 +----- 6 files changed, 23 insertions(+), 38 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.kt index 2e977e1c67f..af8383325cc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.kt @@ -16,20 +16,23 @@ package org.jetbrains.jet.lang.resolve.java.structure.impl -import com.intellij.openapi.util.Condition -import com.intellij.psi.PsiClass import com.intellij.psi.PsiPackage -import com.intellij.util.containers.ContainerUtil -import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.classes import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.packages +import org.jetbrains.jet.lang.resolve.java.structure.JavaClass public class JavaPackageImpl(psiPackage: PsiPackage) : JavaElementImpl(psiPackage), JavaPackage { - override fun getClasses() = classes(getPsi().getClasses().filter { it.getName() != null }) + override fun getClasses(nameFilter: (String) -> Boolean): MutableCollection { + val psiClasses = getPsi().getClasses().filter { + val name = it.getName() + name != null && nameFilter(name) + } + return classes(psiClasses) + } override fun getSubPackages() = packages(getPsi().getSubPackages()) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt index ac5043f29d9..cb43fe37278 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -45,7 +45,7 @@ public class LazyJavaClassMemberScope( override fun computeMemberIndex(): MemberIndex { return object : ClassMemberIndex(jClass, { !it.isStatic() }) { // For SAM-constructors - override fun getAllMethodNames(): Collection = super.getAllMethodNames() + getAllClassNames() + override fun getAllMethodNames(): Collection = super.getAllMethodNames() + getClassNames({ true }) } } @@ -230,7 +230,7 @@ public class LazyJavaClassMemberScope( DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration()) override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name) - override fun getAllClassNames(): Collection = nestedClassIndex().keySet() + enumEntryIndex().keySet() + override fun getClassNames(nameFilter: (String) -> Boolean): Collection = nestedClassIndex().keySet() + enumEntryIndex().keySet() // TODO override fun getImplicitReceiversHierarchy(): List = listOf() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 018e19b47c3..551561d2038 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -292,13 +292,15 @@ public abstract class LazyJavaMemberScope( //TODO: use nameFilter protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, - nameFilter: (String) -> Boolean): List { + nameFilter: (String) -> Boolean): List { val result = LinkedHashSet() if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) { - for (name in getAllClassNames()) { - // Null signifies that a class found in Java is not present in Kotlin (e.g. package class) - result.addIfNotNull(getClassifier(name)) + for (name in getClassNames(nameFilter)) { + if (nameFilter(name.asString())) { + // Null signifies that a class found in Java is not present in Kotlin (e.g. package class) + result.addIfNotNull(getClassifier(name)) + } } } @@ -325,7 +327,7 @@ public abstract class LazyJavaMemberScope( // Do nothing } - protected abstract fun getAllClassNames(): Collection + protected abstract fun getClassNames(nameFilter: (String) -> Boolean): Collection override fun toString() = "Lazy scope for ${getContainingDeclaration()}" diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt index 433e0a599bf..4a06cf4f58f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt @@ -108,11 +108,11 @@ public class LazyPackageFragmentScopeForJavaPackage( override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX { // For SAM-constructors - override fun getAllMethodNames(): Collection = getAllClassNames() + override fun getAllMethodNames(): Collection = getClassNames({ true }) } - override fun getAllClassNames(): Collection { - return jPackage.getClasses().stream() + override fun getClassNames(nameFilter: (String) -> Boolean): Collection { + return jPackage.getClasses(nameFilter).stream() .filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS } .map { c -> c.getName() }.toList() } @@ -163,8 +163,8 @@ public class LazyJavaStaticClassScope( } return super.getAllFunctionNames() } - - override fun getAllClassNames(): Collection = listOf() + + override fun getClassNames(nameFilter: (String) -> Boolean): Collection = listOf() override fun getClassifier(name: Name): ClassifierDescriptor? = null override fun getSubPackages(): Collection = listOf() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index fe0b97321e8..64553f8d1d6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -114,20 +114,4 @@ public final class DescriptorResolverUtils { } return false; } - - @NotNull - public static Collection getClassesInPackage(@NotNull JavaPackage javaPackage) { - Collection classes = javaPackage.getClasses(); - Set addedQualifiedNames = new HashSet(classes.size()); - List result = new ArrayList(classes.size()); - - for (JavaClass javaClass : classes) { - FqName fqName = javaClass.getFqName(); - if (fqName != null && addedQualifiedNames.add(fqName)) { - result.add(javaClass); - } - } - - return result; - } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPackage.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPackage.kt index 9d09dd0f21c..35e4989bbc1 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPackage.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPackage.kt @@ -19,11 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.structure import org.jetbrains.jet.lang.resolve.name.FqName public trait JavaPackage : JavaElement { - /** - * NOTE: do not use this method directly - * @see org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils#getClassesInPackage(JavaPackage) - */ - public fun getClasses(): Collection + public fun getClasses(nameFilter: (String) -> Boolean): Collection public fun getSubPackages(): Collection