lightAnnotations: KtLightPsiClassObjectAccessExpression added

as implementation of `PsiClassObjectAccessExpression` for class literals in annotations
This commit is contained in:
Nicolay Mitropolsky
2018-06-04 18:19:46 +03:00
committed by xiexed
parent 92727d2945
commit 0fb879dfc2
6 changed files with 135 additions and 36 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf
import org.jetbrains.kotlin.idea.facet.configureFacet
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
import org.jetbrains.kotlin.idea.search.projectScope
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
@@ -208,6 +209,32 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
})
}
fun testClassLiteral() {
myFixture.addClass(
"""
public @interface ClazzAnnotation {
Class<?> cls();
}
""".trimIndent()
)
myFixture.configureByText(
"AnnotatedClass.kt", """
@ClazzAnnotation(cls = String::class)
class AnnotatedClass
""".trimIndent()
)
myFixture.testHighlighting("AnnotatedClass.kt")
val annotations = myFixture.findClass("AnnotatedClass").expectAnnotations(1)
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
assertTextAndRange("String::class", annotationAttributeVal)
TestCase.assertEquals(
PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()),
annotationAttributeVal.operand.type
)
}
fun testAnnotationsInAnnotationsArrayDeclarations() {
myFixture.addClass("""
public @interface OuterAnnotation {
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf
import org.jetbrains.kotlin.idea.facet.configureFacet
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
import org.jetbrains.kotlin.idea.search.projectScope
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
@@ -209,6 +210,32 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
})
}
fun testClassLiteral() {
myFixture.addClass(
"""
public @interface ClazzAnnotation {
Class<?> cls();
}
""".trimIndent()
)
myFixture.configureByText(
"AnnotatedClass.kt", """
@ClazzAnnotation(cls = String::class)
class AnnotatedClass
""".trimIndent()
)
myFixture.testHighlighting("AnnotatedClass.kt")
val annotations = myFixture.findClass("AnnotatedClass").expectAnnotations(1)
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
assertTextAndRange("String::class", annotationAttributeVal)
TestCase.assertEquals(
PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()),
annotationAttributeVal.operand.type
)
}
fun testAnnotationsInAnnotationsArrayDeclarations() {
myFixture.addClass("""
public @interface OuterAnnotation {