From ddcab047ce59bcc5b9c4ca994418d8421eb97693 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sat, 10 Oct 2015 17:56:22 +0300 Subject: [PATCH] Added CallType.ANNOTATION --- .../codeInsight/ReferenceVariantsHelper.kt | 4 ++++ .../jetbrains/kotlin/idea/util/CallType.kt | 22 +++++++++++++++---- .../idea/util/ShadowedDeclarationsFilter.kt | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt index 5813d3714d1..6cb0bdc383f 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt @@ -110,6 +110,10 @@ public class ReferenceVariantsHelper( return getVariantsForUserType(callTypeAndReceiver.receiver, expression, kindFilter, nameFilter) } + is CallTypeAndReceiver.ANNOTATION -> { + return getVariantsForUserType(callTypeAndReceiver.receiver, expression, kindFilter, nameFilter) + } + is CallTypeAndReceiver.CALLABLE_REFERENCE -> { val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression.parent as JetExpression] ?: return emptyList() return getVariantsForCallableReference(callTypeAndReceiver.receiver, resolutionScope, kindFilter, nameFilter) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index 3bff2b5e371..117dd7f6c50 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.idea.util -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression @@ -56,6 +53,8 @@ public sealed class CallType(val descriptorKindFilter: object TYPE : CallType(DescriptorKindFilter(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK)) + object ANNOTATION : CallType(DescriptorKindFilter(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) exclude NonAnnotationClassifierExclude) + private object NonInfixExclude : DescriptorKindExclude() { override fun excludes(descriptor: DeclarationDescriptor) = !(descriptor is SimpleFunctionDescriptor && descriptor.isInfix) @@ -80,6 +79,14 @@ public sealed class CallType(val descriptorKindFilter: get() = 0 } + private object NonAnnotationClassifierExclude : DescriptorKindExclude() { + override fun excludes(descriptor: DeclarationDescriptor): Boolean { + if (descriptor !is ClassifierDescriptor) return false + return descriptor !is ClassDescriptor || descriptor.getKind() != ClassKind.ANNOTATION_CLASS + } + + override val fullyExcludedDescriptorKinds: Int get() = 0 + } } public sealed class CallTypeAndReceiver>( @@ -96,6 +103,7 @@ public sealed class CallTypeAndReceiver(CallType.IMPORT_DIRECTIVE, receiver) class PACKAGE_DIRECTIVE(receiver: JetExpression?) : CallTypeAndReceiver(CallType.PACKAGE_DIRECTIVE, receiver) class TYPE(receiver: JetExpression?) : CallTypeAndReceiver(CallType.TYPE, receiver) + class ANNOTATION(receiver: JetExpression?) : CallTypeAndReceiver(CallType.ANNOTATION, receiver) companion object { public fun detect(expression: JetSimpleNameExpression): CallTypeAndReceiver<*, *> { @@ -115,6 +123,11 @@ public sealed class CallTypeAndReceiver.receiverTypes( is CallTypeAndReceiver.IMPORT_DIRECTIVE, is CallTypeAndReceiver.PACKAGE_DIRECTIVE, is CallTypeAndReceiver.TYPE, + is CallTypeAndReceiver.ANNOTATION, is CallTypeAndReceiver.UNKNOWN -> return null diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt index afe9c3cdc4a..403b3cdce55 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt @@ -55,7 +55,7 @@ public class ShadowedDeclarationsFilter private constructor( is CallTypeAndReceiver.DOT -> callTypeAndReceiver.receiver is CallTypeAndReceiver.SAFE -> callTypeAndReceiver.receiver is CallTypeAndReceiver.INFIX -> callTypeAndReceiver.receiver - is CallTypeAndReceiver.TYPE -> null // need filtering of classes with the same FQ-name + is CallTypeAndReceiver.TYPE, is CallTypeAndReceiver.ANNOTATION -> null // need filtering of classes with the same FQ-name else -> return null // TODO: support shadowed declarations filtering for callable references }