KtLightAnnotation: handling vararg with single arg (EA-114679)
It is deprecated but yet possible form of usage
This commit is contained in:
+10
-5
@@ -194,15 +194,20 @@ class KtLightAnnotationForSourceEntry(
|
|||||||
delegate.initializers.mapIndexed { i, memberValue ->
|
delegate.initializers.mapIndexed { i, memberValue ->
|
||||||
wrapAnnotationValue(memberValue, this, {
|
wrapAnnotationValue(memberValue, this, {
|
||||||
originalExpression.let { ktOrigin ->
|
originalExpression.let { ktOrigin ->
|
||||||
when (ktOrigin) {
|
when {
|
||||||
is KtValueArgumentList -> ktOrigin.arguments.getOrNull(i)?.getArgumentExpression()
|
ktOrigin is KtValueArgumentList -> ktOrigin.arguments.getOrNull(i)?.getArgumentExpression()
|
||||||
is KtCallElement -> ktOrigin.valueArguments.getOrNull(i)?.getArgumentExpression()
|
ktOrigin is KtCallElement -> ktOrigin.valueArguments.getOrNull(i)?.getArgumentExpression()
|
||||||
is KtCollectionLiteralExpression -> ktOrigin.getInnerExpressions().getOrNull(i)
|
ktOrigin is KtCollectionLiteralExpression -> ktOrigin.getInnerExpressions().getOrNull(i)
|
||||||
|
delegate.initializers.size == 1 -> ktOrigin
|
||||||
else -> null
|
else -> null
|
||||||
}.also {
|
}.also {
|
||||||
if (it == null)
|
if (it == null)
|
||||||
LOG.error("error wrapping ${memberValue.javaClass} for ${ktOrigin?.javaClass} in ${ktOrigin?.containingFile}",
|
LOG.error("error wrapping ${memberValue.javaClass} for ${ktOrigin?.javaClass} in ${ktOrigin?.containingFile}",
|
||||||
Attachment("source_fragments.txt", "origin: '${psiReport(ktOrigin)}', delegate: ${psiReport(delegate)}"))
|
Attachment(
|
||||||
|
"source_fragments.txt",
|
||||||
|
"origin: '${psiReport(ktOrigin)}', delegate: ${psiReport(delegate)}, parent: ${psiReport(parent)}"
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -339,6 +339,27 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testVarargWithSingleArg() {
|
||||||
|
myFixture.addClass("""
|
||||||
|
public @interface Annotation {
|
||||||
|
String[] value();
|
||||||
|
}
|
||||||
|
""".trimIndent())
|
||||||
|
|
||||||
|
myFixture.configureByText("AnnotatedClass.kt", """
|
||||||
|
@Annotation(value = "a")
|
||||||
|
open class AnnotatedClass
|
||||||
|
""".trimIndent())
|
||||||
|
myFixture.testHighlighting("Annotation.java", "AnnotatedClass.kt")
|
||||||
|
|
||||||
|
val annotations = myFixture.findClass("AnnotatedClass").expectAnnotations(1)
|
||||||
|
val annotationAttributeVal = annotations.first().findAttributeValue("value") as PsiArrayInitializerMemberValue
|
||||||
|
assertTextAndRange("\"a\"", annotationAttributeVal)
|
||||||
|
for ((i, arg) in listOf("\"a\"").withIndex()) {
|
||||||
|
assertTextAndRange(arg, annotationAttributeVal.initializers[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun testVarargWithArrayLiteralAndSpread() {
|
fun testVarargWithArrayLiteralAndSpread() {
|
||||||
myFixture.addClass("""
|
myFixture.addClass("""
|
||||||
public @interface Annotation {
|
public @interface Annotation {
|
||||||
|
|||||||
Reference in New Issue
Block a user