From 38256d32404263fef48e35a6803403e68af4ba18 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Sun, 16 Nov 2014 04:03:14 +0300 Subject: [PATCH] toString() for filter --- .../descriptor/SamConstructorDescriptor.kt | 3 +- .../jet/lang/resolve/scopes/JetScope.kt | 41 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt index e3d4dd1f19f..041f59be712 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt @@ -34,5 +34,6 @@ public class SamConstructorDescriptor( ) public object SamConstructorDescriptorKindExclude : DescriptorKindExclude { - override fun matches(descriptor: DeclarationDescriptor) = descriptor is SamConstructorDescriptor + override fun matches(descriptor: DeclarationDescriptor) = descriptor is SamConstructorDescriptor + override fun toString() = this.javaClass.getSimpleName() } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt index 67e1d087410..7eabc3d14cd 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt @@ -19,6 +19,8 @@ package org.jetbrains.jet.lang.resolve.scopes import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.utils.Printer +import org.jetbrains.jet.utils.toReadOnlyList +import java.lang.reflect.Modifier public trait JetScope { @@ -114,6 +116,16 @@ public class DescriptorKindFilter( return DescriptorKindFilter(mask, excludes) } + override fun toString(): String { + val predefinedFilterName = DEBUG_PREDEFINED_FILTERS_MASK_NAMES.firstOrNull { it.mask == kindMask } ?.name + val kindString = predefinedFilterName ?: DEBUG_MASK_BIT_NAMES + .map { if (acceptsKinds(it.mask)) it.name else null } + .filterNotNull() + .joinToString(separator = " | ") + + return "DescriptorKindFilter($kindString, $excludes)" + } + private fun DeclarationDescriptor.kind(): Int { return when (this) { is ClassDescriptor -> if (this.getKind().isSingleton()) SINGLETON_CLASSIFIERS_MASK else NON_SINGLETON_CLASSIFIERS_MASK @@ -145,6 +157,29 @@ public class DescriptorKindFilter( public val FUNCTIONS: DescriptorKindFilter = DescriptorKindFilter(FUNCTIONS_MASK) public val VARIABLES: DescriptorKindFilter = DescriptorKindFilter(VARIABLES_MASK) public val VALUES: DescriptorKindFilter = DescriptorKindFilter(VALUES_MASK) + + private class MaskToName(val mask: Int, val name: String) + + private val DEBUG_PREDEFINED_FILTERS_MASK_NAMES = staticFields() + .map { field -> + val filter = field.get(null) as? DescriptorKindFilter + if (filter != null) MaskToName(filter.kindMask, field.getName()) else null + } + .filterNotNull() + .toReadOnlyList() + + private val DEBUG_MASK_BIT_NAMES = staticFields() + .filter { it.getType() == Integer.TYPE } + .map { field -> + val mask = field.get(null) as Int + val isOneBitMask = mask == (mask and (-mask)) + if (isOneBitMask) MaskToName(mask, field.getName()) else null + } + .filterNotNull() + .toReadOnlyList() + + [suppress("NOTHING_TO_INLINE")] + private inline fun staticFields() = javaClass().getFields().filter { Modifier.isStatic(it.getModifiers()) } } } @@ -154,10 +189,14 @@ public trait DescriptorKindExclude { public object Extensions : DescriptorKindExclude { override fun matches(descriptor: DeclarationDescriptor) = descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null + + override fun toString() = this.javaClass.getSimpleName() } public object NonExtensions : DescriptorKindExclude { override fun matches(descriptor: DeclarationDescriptor) = descriptor !is CallableDescriptor || descriptor.getExtensionReceiverParameter() == null + + override fun toString() = this.javaClass.getSimpleName() } -} +} \ No newline at end of file