From b4501a6b984b84782313501030e3d30100aabfdd Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 19 Oct 2015 21:33:17 +0300 Subject: [PATCH] Fixed filtering of annotation classes in annotation completion broken recently --- .../idea/completion/BasicCompletionSession.kt | 13 ++++++++++--- .../basic/common/annotations/OnlyAnnotations.kt | 10 ++++++++++ .../test/JSBasicCompletionTestGenerated.java | 6 ++++++ .../test/JvmBasicCompletionTestGenerated.java | 6 ++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index b8026434862..9e98c4ee1f8 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.idea.completion.smart.SmartCompletion import org.jetbrains.kotlin.idea.completion.smart.SmartCompletionItemPriority import org.jetbrains.kotlin.idea.project.ProjectStructureUtil import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil +import org.jetbrains.kotlin.idea.util.CallType import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -75,10 +76,12 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, PARAMETER_NAME(descriptorKindFilter = null, classKindFilter = null), - SUPER_QUALIFIER(descriptorKindFilter = DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS, classKindFilter = null) + SUPER_QUALIFIER(descriptorKindFilter = DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS, classKindFilter = null), + + ANNOTATION(descriptorKindFilter = CallType.ANNOTATION.descriptorKindFilter, classKindFilter = { it == ClassKind.ANNOTATION_CLASS }) } - private val completionKind = calcCompletionKind() + private val completionKind = detectCompletionKind() override val descriptorKindFilter = if (isNoQualifierContext()) { // it's an optimization because obtaining top-level packages from scope is very slow, we obtains them in other way @@ -104,7 +107,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, override val expectedInfos: Collection get() = smartCompletion?.expectedInfos ?: emptyList() - private fun calcCompletionKind(): CompletionKind { + private fun detectCompletionKind(): CompletionKind { if (nameExpression != null && NamedArgumentCompletion.isOnlyNamedArgumentExpected(nameExpression)) { return CompletionKind.NAMED_ARGUMENTS_ONLY } @@ -117,6 +120,10 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, CompletionKind.KEYWORDS_ONLY } + if (callTypeAndReceiver is CallTypeAndReceiver.ANNOTATION) { + return CompletionKind.ANNOTATION // we need special completion kind for it to filter non-imported classes with classKindFilter + } + // Check that completion in the type annotation context and if there's a qualified // expression we are at first of it val typeReference = position.getStrictParentOfType() diff --git a/idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt b/idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt new file mode 100644 index 00000000000..ec6ef462346 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt @@ -0,0 +1,10 @@ +annotation class III + +@I +annotation class A + +// INVOCATION_COUNT: 2 +// EXIST: III +// EXIST_JAVA_ONLY: Inherited +// ABSENT: Icon +// ABSENT: IllegalAccessException diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 0fd33c3fb4c..5f403b00fff 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -771,6 +771,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("OnlyAnnotations.kt") + public void testOnlyAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt"); + doTest(fileName); + } + @TestMetadata("ParameterAnnotation1.kt") public void testParameterAnnotation1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index b93f2bc8009..bbd1d5cb367 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -771,6 +771,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("OnlyAnnotations.kt") + public void testOnlyAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/OnlyAnnotations.kt"); + doTest(fileName); + } + @TestMetadata("ParameterAnnotation1.kt") public void testParameterAnnotation1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt");