From e934d7166b7a17aef99e6a279aa4c754dc9cb800 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 16 Jul 2015 17:12:44 +0300 Subject: [PATCH] DescriptorKindFilter: more correct filtering of kind mask from excludes --- .../org/jetbrains/kotlin/resolve/scopes/JetScope.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt index 6735a8f95e0..6a180bc757b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt @@ -100,9 +100,17 @@ public fun JetScope.getDescriptorsFiltered( } public class DescriptorKindFilter( - public val kindMask: Int, + kindMask: Int, public val excludes: List = listOf() ) { + public val kindMask: Int + + init { + var mask = kindMask + excludes.forEach { mask = mask and it.fullyExcludedDescriptorKinds.inv() } + this.kindMask = mask + } + public fun accepts(descriptor: DeclarationDescriptor): Boolean = kindMask and descriptor.kind() != 0 && excludes.all { !it.matches(descriptor) } @@ -110,7 +118,7 @@ public class DescriptorKindFilter( = kindMask and kinds != 0 public fun exclude(exclude: DescriptorKindExclude): DescriptorKindFilter - = DescriptorKindFilter(kindMask and exclude.fullyExcludedDescriptorKinds.inv(), excludes + listOf(exclude)) + = DescriptorKindFilter(kindMask, excludes + listOf(exclude)) public fun withoutKinds(kinds: Int): DescriptorKindFilter = DescriptorKindFilter(kindMask and kinds.inv(), excludes)