Support for collections literals in LightAnnotations (KT-20543)
This commit is contained in:
@@ -183,7 +183,13 @@ class KtLightAnnotationForSourceEntry(
|
|||||||
private val _initializers by lazyPub {
|
private val _initializers by lazyPub {
|
||||||
delegate.initializers.mapIndexed { i, it ->
|
delegate.initializers.mapIndexed { i, it ->
|
||||||
wrapAnnotationValue(it, this, {
|
wrapAnnotationValue(it, this, {
|
||||||
(originalExpression as KtCallElement).valueArguments[i].getArgumentExpression()!!
|
originalExpression.let {
|
||||||
|
when (it) {
|
||||||
|
is KtCallElement -> it.valueArguments[i].getArgumentExpression()!!
|
||||||
|
is KtCollectionLiteralExpression -> it.getInnerExpressions()[i]
|
||||||
|
else -> throw UnsupportedOperationException("cant process $it of type ${it?.javaClass}")
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}.toTypedArray()
|
}.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.asJava
|
package org.jetbrains.kotlin.asJava
|
||||||
|
|
||||||
|
import com.intellij.openapi.application.WriteAction
|
||||||
|
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.testFramework.LightProjectDescriptor
|
import com.intellij.testFramework.LightProjectDescriptor
|
||||||
import junit.framework.TestCase
|
import junit.framework.TestCase
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
|
import org.jetbrains.kotlin.idea.facet.configureFacet
|
||||||
|
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||||
|
|
||||||
@@ -202,6 +207,25 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
assertTextAndRange("\"def\"", annotationAttributeVal.initializers[1])
|
assertTextAndRange("\"def\"", annotationAttributeVal.initializers[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testKotlinAnnotationWithStringArrayLiteral() {
|
||||||
|
configureKotlinVersion("1.2")
|
||||||
|
myFixture.configureByText("AnnotatedClass.kt", """
|
||||||
|
annotation class Anno(val params: Array<String>)
|
||||||
|
@Anno(params = ["abc", "def"])
|
||||||
|
class AnnotatedClass
|
||||||
|
""".trimIndent())
|
||||||
|
myFixture.testHighlighting("AnnotatedClass.kt")
|
||||||
|
|
||||||
|
val annotations = myFixture.findClass("AnnotatedClass").expectAnnotations(1)
|
||||||
|
val annotationAttributeVal = annotations.first().findAttributeValue("params") as PsiElement
|
||||||
|
assertTextAndRange("[\"abc\", \"def\"]", annotationAttributeVal)
|
||||||
|
|
||||||
|
annotationAttributeVal as PsiArrayInitializerMemberValue
|
||||||
|
assertTextAndRange("\"abc\"", annotationAttributeVal.initializers[0])
|
||||||
|
assertTextAndRange("\"def\"", annotationAttributeVal.initializers[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun testKotlinAnnotationsArray() {
|
fun testKotlinAnnotationsArray() {
|
||||||
myFixture.configureByText("AnnotatedClass.kt", """
|
myFixture.configureByText("AnnotatedClass.kt", """
|
||||||
annotation class Anno1(val anno2: Array<Anno2>)
|
annotation class Anno1(val anno2: Array<Anno2>)
|
||||||
@@ -376,4 +400,13 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
number, size)
|
number, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun configureKotlinVersion(version: String) {
|
||||||
|
WriteAction.run<Throwable> {
|
||||||
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
|
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||||
|
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||||
|
modelsProvider.commit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user