LazyPackageFragmentScopeForJavaPackage uses name filter in getDescriptors() for methods and properties as well

This commit is contained in:
Valentin Kipyatkov
2014-10-31 20:30:37 +03:00
parent c7527e4a4d
commit e51993d339
4 changed files with 19 additions and 16 deletions
@@ -45,7 +45,7 @@ public class LazyJavaClassMemberScope(
override fun computeMemberIndex(): MemberIndex { override fun computeMemberIndex(): MemberIndex {
return object : ClassMemberIndex(jClass, { !it.isStatic() }) { return object : ClassMemberIndex(jClass, { !it.isStatic() }) {
// For SAM-constructors // For SAM-constructors
override fun getAllMethodNames(): Collection<Name> = super.getAllMethodNames() + getClassNames({ true }) override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection<Name> = super.getMethodNames(nameFilter) + getClassNames(nameFilter)
} }
} }
@@ -214,7 +214,7 @@ public class LazyJavaClassMemberScope(
if (field != null) { if (field != null) {
EnumEntrySyntheticClassDescriptor.create(c.storageManager, getContainingDeclaration(), name, EnumEntrySyntheticClassDescriptor.create(c.storageManager, getContainingDeclaration(), name,
c.storageManager.createLazyValue { c.storageManager.createLazyValue {
memberIndex().getAllFieldNames() + memberIndex().getAllMethodNames() memberIndex().getAllFieldNames() + memberIndex().getMethodNames({true})
}, c.sourceElementFactory.source(field)) }, c.sourceElementFactory.source(field))
} }
else null else null
@@ -208,7 +208,7 @@ public abstract class LazyJavaMemberScope(
} }
override fun getFunctions(name: Name) = functions(name) override fun getFunctions(name: Name) = functions(name)
protected open fun getAllFunctionNames(): Collection<Name> = memberIndex().getAllMethodNames() protected open fun getFunctionNames(nameFilter: (Name) -> Boolean): Collection<Name> = memberIndex().getMethodNames(nameFilter)
protected abstract fun computeNonDeclaredProperties(name: Name, result: MutableCollection<PropertyDescriptor>) protected abstract fun computeNonDeclaredProperties(name: Name, result: MutableCollection<PropertyDescriptor>)
@@ -290,7 +290,6 @@ public abstract class LazyJavaMemberScope(
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (Name) -> Boolean) = allDescriptors() nameFilter: (Name) -> Boolean) = allDescriptors()
//TODO: use nameFilter
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>() val result = LinkedHashSet<DeclarationDescriptor>()
@@ -305,14 +304,18 @@ public abstract class LazyJavaMemberScope(
} }
if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_FUNCTION)) { if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_FUNCTION)) {
for (name in getAllFunctionNames()) { for (name in getFunctionNames(nameFilter)) {
result.addAll(getFunctions(name)) if (nameFilter(name)) {
result.addAll(getFunctions(name))
}
} }
} }
if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_PROPERTY)) { if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_PROPERTY)) {
for (name in getAllPropertyNames()) { for (name in getAllPropertyNames()) {
result.addAll(getProperties(name)) if (nameFilter(name)) {
result.addAll(getProperties(name))
}
} }
} }
@@ -108,7 +108,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX { override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX {
// For SAM-constructors // For SAM-constructors
override fun getAllMethodNames(): Collection<Name> = getClassNames({ true }) override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection<Name> = getClassNames(nameFilter)
} }
override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> { override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> {
@@ -148,20 +148,20 @@ public class LazyJavaStaticClassScope(
override fun computeMemberIndex(): MemberIndex { override fun computeMemberIndex(): MemberIndex {
val delegate = ClassMemberIndex(jClass) { it.isStatic() } val delegate = ClassMemberIndex(jClass) { it.isStatic() }
return object : MemberIndex by delegate { return object : MemberIndex by delegate {
override fun getAllMethodNames(): Collection<Name> { override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection<Name> {
// Should be a super call, but KT-2860 // Should be a super call, but KT-2860
return delegate.getAllMethodNames() + return delegate.getMethodNames(nameFilter) +
// For SAM-constructors // For SAM-constructors
jClass.getInnerClasses().map { it.getName() } jClass.getInnerClasses().map { it.getName() }
} }
} }
} }
override fun getAllFunctionNames(): Collection<Name> { override fun getFunctionNames(nameFilter: (Name) -> Boolean): Collection<Name> {
if (jClass.isEnum()) { 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<Name> = listOf() override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> = listOf()
@@ -24,7 +24,7 @@ import java.util.HashSet
trait MemberIndex { trait MemberIndex {
fun findMethodsByName(name: Name): Collection<JavaMethod> fun findMethodsByName(name: Name): Collection<JavaMethod>
fun getAllMethodNames(): Collection<Name> fun getMethodNames(nameFilter: (Name) -> Boolean): Collection<Name>
fun findFieldByName(name: Name): JavaField? fun findFieldByName(name: Name): JavaField?
fun getAllFieldNames(): Collection<Name> fun getAllFieldNames(): Collection<Name>
@@ -32,7 +32,7 @@ trait MemberIndex {
object EMPTY_MEMBER_INDEX : MemberIndex { object EMPTY_MEMBER_INDEX : MemberIndex {
override fun findMethodsByName(name: Name) = listOf<JavaMethod>() override fun findMethodsByName(name: Name) = listOf<JavaMethod>()
override fun getAllMethodNames() = listOf<Name>() override fun getMethodNames(nameFilter: (Name) -> Boolean) = listOf<Name>()
override fun findFieldByName(name: Name): JavaField? = null override fun findFieldByName(name: Name): JavaField? = null
override fun getAllFieldNames() = listOf<Name>() override fun getAllFieldNames() = listOf<Name>()
@@ -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() } private val fields = jClass.getFields().stream().filter(memberFilter).valuesToMap { m -> m.getName() }
override fun findMethodsByName(name: Name): Collection<JavaMethod> = methods[name] ?: listOf() override fun findMethodsByName(name: Name): Collection<JavaMethod> = methods[name] ?: listOf()
override fun getAllMethodNames(): Collection<Name> = jClass.getAllMemberNames(methodFilter) { getMethods() } override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection<Name> = jClass.getAllMemberNames(methodFilter) { getMethods() }
override fun findFieldByName(name: Name): JavaField? = fields[name] override fun findFieldByName(name: Name): JavaField? = fields[name]
override fun getAllFieldNames(): Collection<Name> = jClass.getAllMemberNames(memberFilter) { getFields() } override fun getAllFieldNames(): Collection<Name> = jClass.getAllMemberNames(memberFilter) { getFields() }