From e51993d339b826b193b933d013b7ee0af56c3d7d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 31 Oct 2014 20:30:37 +0300 Subject: [PATCH] LazyPackageFragmentScopeForJavaPackage uses name filter in getDescriptors() for methods and properties as well --- .../lazy/descriptors/LazyJavaClassMemberScope.kt | 4 ++-- .../java/lazy/descriptors/LazyJavaMemberScope.kt | 13 ++++++++----- .../java/lazy/descriptors/LazyJavaStaticScope.kt | 12 ++++++------ .../resolve/java/lazy/descriptors/MemberIndex.kt | 6 +++--- 4 files changed, 19 insertions(+), 16 deletions(-) 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 ab9171cfba6..d3f097bcde3 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() + getClassNames({ true }) + override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection = super.getMethodNames(nameFilter) + getClassNames(nameFilter) } } @@ -214,7 +214,7 @@ public class LazyJavaClassMemberScope( if (field != null) { EnumEntrySyntheticClassDescriptor.create(c.storageManager, getContainingDeclaration(), name, c.storageManager.createLazyValue { - memberIndex().getAllFieldNames() + memberIndex().getAllMethodNames() + memberIndex().getAllFieldNames() + memberIndex().getMethodNames({true}) }, c.sourceElementFactory.source(field)) } else null 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 f993357f228..c04d036a300 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 @@ -208,7 +208,7 @@ public abstract class LazyJavaMemberScope( } override fun getFunctions(name: Name) = functions(name) - protected open fun getAllFunctionNames(): Collection = memberIndex().getAllMethodNames() + protected open fun getFunctionNames(nameFilter: (Name) -> Boolean): Collection = memberIndex().getMethodNames(nameFilter) protected abstract fun computeNonDeclaredProperties(name: Name, result: MutableCollection) @@ -290,7 +290,6 @@ public abstract class LazyJavaMemberScope( override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean) = allDescriptors() - //TODO: use nameFilter protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List { val result = LinkedHashSet() @@ -305,14 +304,18 @@ public abstract class LazyJavaMemberScope( } if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_FUNCTION)) { - for (name in getAllFunctionNames()) { - result.addAll(getFunctions(name)) + for (name in getFunctionNames(nameFilter)) { + if (nameFilter(name)) { + result.addAll(getFunctions(name)) + } } } if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_PROPERTY)) { for (name in getAllPropertyNames()) { - result.addAll(getProperties(name)) + if (nameFilter(name)) { + result.addAll(getProperties(name)) + } } } 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 5ae74f47378..e62a4c21137 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,7 +108,7 @@ public class LazyPackageFragmentScopeForJavaPackage( override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX { // For SAM-constructors - override fun getAllMethodNames(): Collection = getClassNames({ true }) + override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection = getClassNames(nameFilter) } override fun getClassNames(nameFilter: (Name) -> Boolean): Collection { @@ -148,20 +148,20 @@ public class LazyJavaStaticClassScope( override fun computeMemberIndex(): MemberIndex { val delegate = ClassMemberIndex(jClass) { it.isStatic() } return object : MemberIndex by delegate { - override fun getAllMethodNames(): Collection { + override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection { // Should be a super call, but KT-2860 - return delegate.getAllMethodNames() + + return delegate.getMethodNames(nameFilter) + // For SAM-constructors jClass.getInnerClasses().map { it.getName() } } } } - override fun getAllFunctionNames(): Collection { + override fun getFunctionNames(nameFilter: (Name) -> Boolean): Collection { if (jClass.isEnum()) { - return super.getAllFunctionNames() + listOf(DescriptorUtils.ENUM_VALUE_OF, DescriptorUtils.ENUM_VALUES) + return super.getFunctionNames(nameFilter) + listOf(DescriptorUtils.ENUM_VALUE_OF, DescriptorUtils.ENUM_VALUES) } - return super.getAllFunctionNames() + return super.getFunctionNames(nameFilter) } override fun getClassNames(nameFilter: (Name) -> Boolean): Collection = listOf() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt index 28e0493c091..4e64120a62b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt @@ -24,7 +24,7 @@ import java.util.HashSet trait MemberIndex { fun findMethodsByName(name: Name): Collection - fun getAllMethodNames(): Collection + fun getMethodNames(nameFilter: (Name) -> Boolean): Collection fun findFieldByName(name: Name): JavaField? fun getAllFieldNames(): Collection @@ -32,7 +32,7 @@ trait MemberIndex { object EMPTY_MEMBER_INDEX : MemberIndex { override fun findMethodsByName(name: Name) = listOf() - override fun getAllMethodNames() = listOf() + override fun getMethodNames(nameFilter: (Name) -> Boolean) = listOf() override fun findFieldByName(name: Name): JavaField? = null override fun getAllFieldNames() = listOf() @@ -48,7 +48,7 @@ open class ClassMemberIndex(val jClass: JavaClass, val memberFilter: (JavaMember private val fields = jClass.getFields().stream().filter(memberFilter).valuesToMap { m -> m.getName() } override fun findMethodsByName(name: Name): Collection = methods[name] ?: listOf() - override fun getAllMethodNames(): Collection = jClass.getAllMemberNames(methodFilter) { getMethods() } + override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection = jClass.getAllMemberNames(methodFilter) { getMethods() } override fun findFieldByName(name: Name): JavaField? = fields[name] override fun getAllFieldNames(): Collection = jClass.getAllMemberNames(memberFilter) { getFields() }