LazyPackageFragmentScopeForJavaPackage uses name filter in getDescriptors() for classes
This commit is contained in:
+8
-5
@@ -16,20 +16,23 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.structure.impl
|
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.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.java.structure.JavaPackage
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
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.classes
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.packages
|
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>(psiPackage), JavaPackage {
|
public class JavaPackageImpl(psiPackage: PsiPackage) : JavaElementImpl<PsiPackage>(psiPackage), JavaPackage {
|
||||||
|
|
||||||
override fun getClasses() = classes(getPsi().getClasses().filter { it.getName() != null })
|
override fun getClasses(nameFilter: (String) -> Boolean): MutableCollection<JavaClass> {
|
||||||
|
val psiClasses = getPsi().getClasses().filter {
|
||||||
|
val name = it.getName()
|
||||||
|
name != null && nameFilter(name)
|
||||||
|
}
|
||||||
|
return classes(psiClasses)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getSubPackages() = packages(getPsi().getSubPackages())
|
override fun getSubPackages() = packages(getPsi().getSubPackages())
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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() + getAllClassNames()
|
override fun getAllMethodNames(): Collection<Name> = super.getAllMethodNames() + getClassNames({ true })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ public class LazyJavaClassMemberScope(
|
|||||||
DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration())
|
DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration())
|
||||||
|
|
||||||
override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name)
|
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
|
// TODO
|
||||||
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
|
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
|
||||||
|
|||||||
+7
-5
@@ -292,13 +292,15 @@ public abstract class LazyJavaMemberScope(
|
|||||||
|
|
||||||
//TODO: use nameFilter
|
//TODO: use nameFilter
|
||||||
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
|
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
|
||||||
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> {
|
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> {
|
||||||
val result = LinkedHashSet<DeclarationDescriptor>()
|
val result = LinkedHashSet<DeclarationDescriptor>()
|
||||||
|
|
||||||
if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) {
|
if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) {
|
||||||
for (name in getAllClassNames()) {
|
for (name in getClassNames(nameFilter)) {
|
||||||
// Null signifies that a class found in Java is not present in Kotlin (e.g. package class)
|
if (nameFilter(name.asString())) {
|
||||||
result.addIfNotNull(getClassifier(name))
|
// 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
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun getAllClassNames(): Collection<Name>
|
protected abstract fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name>
|
||||||
|
|
||||||
override fun toString() = "Lazy scope for ${getContainingDeclaration()}"
|
override fun toString() = "Lazy scope for ${getContainingDeclaration()}"
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -108,11 +108,11 @@ 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> = getAllClassNames()
|
override fun getAllMethodNames(): Collection<Name> = getClassNames({ true })
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAllClassNames(): Collection<Name> {
|
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> {
|
||||||
return jPackage.getClasses().stream()
|
return jPackage.getClasses(nameFilter).stream()
|
||||||
.filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS }
|
.filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS }
|
||||||
.map { c -> c.getName() }.toList()
|
.map { c -> c.getName() }.toList()
|
||||||
}
|
}
|
||||||
@@ -164,7 +164,7 @@ public class LazyJavaStaticClassScope(
|
|||||||
return super.getAllFunctionNames()
|
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 getClassifier(name: Name): ClassifierDescriptor? = null
|
||||||
|
|
||||||
override fun getSubPackages(): Collection<FqName> = listOf()
|
override fun getSubPackages(): Collection<FqName> = listOf()
|
||||||
|
|||||||
-16
@@ -114,20 +114,4 @@ public final class DescriptorResolverUtils {
|
|||||||
}
|
}
|
||||||
return false;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -19,11 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.structure
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
|
|
||||||
public trait JavaPackage : JavaElement {
|
public trait JavaPackage : JavaElement {
|
||||||
/**
|
public fun getClasses(nameFilter: (String) -> Boolean): Collection<JavaClass>
|
||||||
* 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 getSubPackages(): Collection<JavaPackage>
|
public fun getSubPackages(): Collection<JavaPackage>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user