From cbd4b6e20442f453f3438950a204135c01b6f1bc Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 21 Jul 2015 21:20:08 +0300 Subject: [PATCH] Additional resolve for annotation on top level classes --- .../kotlin/resolve/lazy/ElementResolver.kt | 11 ++++++++++- .../annotations/testAnnotationsWithParameters.kt | 2 ++ .../kotlin/idea/ResolveElementCacheTest.kt | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt index 5e973a05733..17470323307 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt @@ -90,9 +90,18 @@ public abstract class ElementResolver protected constructor( javaClass(), javaClass(), javaClass(), - javaClass()) as JetElement? ?: return null + javaClass()) as JetElement? when (elementOfAdditionalResolve) { + null -> { + // Case of JetAnnotationEntry on top level class + if (element is JetAnnotationEntry) { + return element + } + + return null + } + is JetPackageDirective -> return element is JetParameter -> { diff --git a/idea/testData/search/annotations/testAnnotationsWithParameters.kt b/idea/testData/search/annotations/testAnnotationsWithParameters.kt index 1adb5799508..72163d7bca5 100644 --- a/idea/testData/search/annotations/testAnnotationsWithParameters.kt +++ b/idea/testData/search/annotations/testAnnotationsWithParameters.kt @@ -2,6 +2,8 @@ MyAnnotation("f", "s") fun test1() {} MyAnnotation("f", "s") class Test1() {} +MyAnnotation("f", "s") val test3 = 1 + annotation class MyAnnotation(val first: String, val second: String) // ANNOTATION: MyAnnotation diff --git a/idea/tests/org/jetbrains/kotlin/idea/ResolveElementCacheTest.kt b/idea/tests/org/jetbrains/kotlin/idea/ResolveElementCacheTest.kt index 3bbb9aa1bc9..69355a35836 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/ResolveElementCacheTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/ResolveElementCacheTest.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode public class ResolveElementCacheTest : JetLightCodeInsightFixtureTestCase() { @@ -167,4 +168,17 @@ class C(param1: String = "", param2: Int = 0) { assert(bindingContext1 === bindingContext2) } } + + public fun testAnnotationEntry() { + val file = myFixture.configureByText("Test.kt", """ + annotation class A + A class B {} + """) as JetFile + + val klass = file.getDeclarations()[1] as JetClass + val annotationEntry = klass.getAnnotationEntries().single() + + val context = annotationEntry.analyze(BodyResolveMode.PARTIAL) + assert(context[BindingContext.ANNOTATION, annotationEntry] != null) + } }