DescriptorKindFilter: more correct filtering of kind mask from excludes
This commit is contained in:
@@ -100,9 +100,17 @@ public fun JetScope.getDescriptorsFiltered(
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class DescriptorKindFilter(
|
public class DescriptorKindFilter(
|
||||||
public val kindMask: Int,
|
kindMask: Int,
|
||||||
public val excludes: List<DescriptorKindExclude> = listOf()
|
public val excludes: List<DescriptorKindExclude> = 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
|
public fun accepts(descriptor: DeclarationDescriptor): Boolean
|
||||||
= kindMask and descriptor.kind() != 0 && excludes.all { !it.matches(descriptor) }
|
= kindMask and descriptor.kind() != 0 && excludes.all { !it.matches(descriptor) }
|
||||||
|
|
||||||
@@ -110,7 +118,7 @@ public class DescriptorKindFilter(
|
|||||||
= kindMask and kinds != 0
|
= kindMask and kinds != 0
|
||||||
|
|
||||||
public fun exclude(exclude: DescriptorKindExclude): DescriptorKindFilter
|
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
|
public fun withoutKinds(kinds: Int): DescriptorKindFilter
|
||||||
= DescriptorKindFilter(kindMask and kinds.inv(), excludes)
|
= DescriptorKindFilter(kindMask and kinds.inv(), excludes)
|
||||||
|
|||||||
Reference in New Issue
Block a user