Descriptor kind filter replaced with bit mask

This commit is contained in:
Valentin Kipyatkov
2014-11-02 11:18:57 +03:00
parent 43df891515
commit 6f2da4930a
34 changed files with 90 additions and 108 deletions
@@ -50,7 +50,7 @@ public abstract class LazyJavaMemberScope(
private val containingDeclaration: DeclarationDescriptor
) : JetScope {
private val allDescriptors = c.storageManager.createRecursionTolerantLazyValue<Collection<DeclarationDescriptor>>(
{ computeDescriptors({ true }, { true }) },
{ computeDescriptors(JetScope.ALL_KINDS_MASK, JetScope.ALL_NAME_FILTER) },
// This is to avoid the following recursive case:
// when computing getAllPackageNames() we ask the JavaPsiFacade for all subpackages of foo
// it, in turn, asks JavaElementFinder for subpackages of Kotlin package foo, which calls getAllPackageNames() recursively
@@ -287,14 +287,14 @@ public abstract class LazyJavaMemberScope(
override fun getOwnDeclaredDescriptors() = getDescriptors()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
override fun getDescriptors(kindFilterMask: Int,
nameFilter: (Name) -> Boolean) = allDescriptors()
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
protected fun computeDescriptors(kindFilterMask: Int,
nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>()
if (kindFilter(JetScope.DescriptorKind.TYPE)) {
if (kindFilterMask and JetScope.TYPE != 0) {
for (name in getClassNames(nameFilter)) {
if (nameFilter(name)) {
// Null signifies that a class found in Java is not present in Kotlin (e.g. package class)
@@ -303,7 +303,7 @@ public abstract class LazyJavaMemberScope(
}
}
if (kindFilter(JetScope.DescriptorKind.ORDINARY_FUNCTION) || kindFilter(JetScope.DescriptorKind.SAM_CONSTRUCTOR)) {
if (kindFilterMask and (JetScope.ORDINARY_FUNCTION or JetScope.SAM_CONSTRUCTOR) != 0) {
for (name in getFunctionNames(nameFilter)) {
if (nameFilter(name)) {
result.addAll(getFunctions(name))
@@ -311,7 +311,7 @@ public abstract class LazyJavaMemberScope(
}
}
if (kindFilter(JetScope.DescriptorKind.NON_EXTENSION_PROPERTY)) {
if (kindFilterMask and JetScope.NON_EXTENSION_PROPERTY != 0) {
for (name in getAllPropertyNames()) {
if (nameFilter(name)) {
result.addAll(getProperties(name))
@@ -319,13 +319,13 @@ public abstract class LazyJavaMemberScope(
}
}
addExtraDescriptors(result, kindFilter, nameFilter)
addExtraDescriptors(result, kindFilterMask, nameFilter)
return result.toReadOnlyList()
}
protected open fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean,
kindFilterMask: Int,
nameFilter: (Name) -> Boolean) {
// Do nothing
}
@@ -68,9 +68,9 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getFunctions(name: Name) = deserializedPackageScope().getFunctions(name) + super.getFunctions(name)
override fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean,
kindFilterMask: Int,
nameFilter: (Name) -> Boolean) {
result.addAll(deserializedPackageScope().getDescriptors(kindFilter, nameFilter))
result.addAll(deserializedPackageScope().getDescriptors(kindFilterMask, nameFilter))
}
override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX {
@@ -101,7 +101,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: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptors(kindFilter, nameFilter)
override fun getDescriptors(kindFilterMask: Int, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptors(kindFilterMask, nameFilter)
}
}