Name filters filter by Name instead of String

This commit is contained in:
Valentin Kipyatkov
2014-10-31 16:16:54 +03:00
parent 8b2f6007c2
commit c7527e4a4d
26 changed files with 48 additions and 45 deletions
@@ -230,7 +230,7 @@ public class LazyJavaClassMemberScope(
DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration())
override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name)
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
// TODO
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
@@ -288,16 +288,16 @@ public abstract class LazyJavaMemberScope(
override fun getOwnDeclaredDescriptors() = getDescriptors()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = allDescriptors()
nameFilter: (Name) -> Boolean) = allDescriptors()
//TODO: use nameFilter
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> {
nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>()
if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) {
for (name in getClassNames(nameFilter)) {
if (nameFilter(name.asString())) {
if (nameFilter(name)) {
// Null signifies that a class found in Java is not present in Kotlin (e.g. package class)
result.addIfNotNull(getClassifier(name))
}
@@ -323,11 +323,11 @@ public abstract class LazyJavaMemberScope(
protected open fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) {
nameFilter: (Name) -> Boolean) {
// Do nothing
}
protected abstract fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name>
protected abstract fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name>
override fun toString() = "Lazy scope for ${getContainingDeclaration()}"
@@ -102,7 +102,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) {
nameFilter: (Name) -> Boolean) {
result.addAll(deserializedPackageScope().getDescriptors(kindFilter, nameFilter))
}
@@ -111,7 +111,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllMethodNames(): Collection<Name> = getClassNames({ true })
}
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> {
override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> {
return jPackage.getClasses(nameFilter).stream()
.filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS }
.map { c -> c.getName() }.toList()
@@ -134,7 +134,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllPropertyNames() = listOf<Name>()
// we don't use implementation from super which caches all descriptors and does not use filters
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> {
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptors(kindFilter, nameFilter)
}
}
@@ -163,8 +163,8 @@ public class LazyJavaStaticClassScope(
}
return super.getAllFunctionNames()
}
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = listOf()
override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> = listOf()
override fun getClassifier(name: Name): ClassifierDescriptor? = null
override fun getSubPackages(): Collection<FqName> = listOf()
@@ -17,9 +17,10 @@
package org.jetbrains.jet.lang.resolve.java.structure
import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.resolve.name.Name
public trait JavaPackage : JavaElement {
public fun getClasses(nameFilter: (String) -> Boolean): Collection<JavaClass>
public fun getClasses(nameFilter: (Name) -> Boolean): Collection<JavaClass>
public fun getSubPackages(): Collection<JavaPackage>