LazyPackageFragmentScopeForJavaPackage uses name filter in getDescriptors() for classes

This commit is contained in:
Valentin Kipyatkov
2014-10-30 22:06:37 +03:00
parent 5059ae5182
commit b08e444aa0
6 changed files with 23 additions and 38 deletions
@@ -45,7 +45,7 @@ public class LazyJavaClassMemberScope(
override fun computeMemberIndex(): MemberIndex {
return object : ClassMemberIndex(jClass, { !it.isStatic() }) {
// For SAM-constructors
override fun getAllMethodNames(): Collection<Name> = super.getAllMethodNames() + getAllClassNames()
override fun getAllMethodNames(): Collection<Name> = 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<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
// TODO
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
@@ -292,13 +292,15 @@ public abstract class LazyJavaMemberScope(
//TODO: use nameFilter
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> {
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>()
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<Name>
protected abstract fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name>
override fun toString() = "Lazy scope for ${getContainingDeclaration()}"
@@ -108,11 +108,11 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX {
// For SAM-constructors
override fun getAllMethodNames(): Collection<Name> = getAllClassNames()
override fun getAllMethodNames(): Collection<Name> = getClassNames({ true })
}
override fun getAllClassNames(): Collection<Name> {
return jPackage.getClasses().stream()
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> {
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<Name> = listOf()
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = listOf()
override fun getClassifier(name: Name): ClassifierDescriptor? = null
override fun getSubPackages(): Collection<FqName> = listOf()
@@ -114,20 +114,4 @@ public final class DescriptorResolverUtils {
}
return false;
}
@NotNull
public static Collection<JavaClass> getClassesInPackage(@NotNull JavaPackage javaPackage) {
Collection<JavaClass> classes = javaPackage.getClasses();
Set<FqName> addedQualifiedNames = new HashSet<FqName>(classes.size());
List<JavaClass> result = new ArrayList<JavaClass>(classes.size());
for (JavaClass javaClass : classes) {
FqName fqName = javaClass.getFqName();
if (fqName != null && addedQualifiedNames.add(fqName)) {
result.add(javaClass);
}
}
return result;
}
}
@@ -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<JavaClass>
public fun getClasses(nameFilter: (String) -> Boolean): Collection<JavaClass>
public fun getSubPackages(): Collection<JavaPackage>