New J2K: Correctly detect varargs argument in annotations & do not throw away named arguments in annotations
This commit is contained in:
committed by
Ilya Kirillov
parent
90c12736da
commit
e39fc53f25
@@ -7,12 +7,12 @@ package org.jetbrains.kotlin.nj2k.conversions
|
||||
|
||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||
import org.jetbrains.kotlin.nj2k.isVarargsArgument
|
||||
import org.jetbrains.kotlin.nj2k.primaryConstructor
|
||||
import org.jetbrains.kotlin.nj2k.toExpression
|
||||
import org.jetbrains.kotlin.nj2k.tree.*
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationNameParameterImpl
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationParameterImpl
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKUniverseClassSymbol
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtAnnotationArrayInitializerExpressionImpl
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKNameIdentifierImpl
|
||||
|
||||
class AnnotationConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
@@ -36,6 +36,17 @@ class AnnotationConversion(private val context: ConversionContext) : RecursiveAp
|
||||
(annotationParameter.value as JKKtAnnotationArrayInitializerExpression)::initializers
|
||||
.detached()
|
||||
.map { JKAnnotationParameterImpl(it) }
|
||||
annotationParameter is JKAnnotationNameParameter
|
||||
&& annotation.isVarargsArgument(index)
|
||||
&& annotation.classSymbol.target is JKClass
|
||||
&& annotationParameter.value !is JKKtAnnotationArrayInitializerExpression -> {
|
||||
listOf(
|
||||
JKAnnotationNameParameterImpl(
|
||||
JKKtAnnotationArrayInitializerExpressionImpl(annotationParameter::value.detached()),
|
||||
JKNameIdentifierImpl(annotationParameter.name.value)
|
||||
)
|
||||
)
|
||||
}
|
||||
annotationParameter is JKAnnotationNameParameterImpl ->
|
||||
listOf(
|
||||
JKAnnotationNameParameterImpl(
|
||||
|
||||
@@ -557,7 +557,14 @@ fun JKAnnotation.isVarargsArgument(index: Int): Boolean {
|
||||
val target = classSymbol.target
|
||||
return when (target) {
|
||||
is JKClass -> target.primaryConstructor()?.parameters?.getOrNull(index)?.isVarArgs
|
||||
is PsiClass -> target.methods.getOrNull(index)?.isVarArgs
|
||||
is PsiClass -> target.methods.getOrNull(index)?.let {
|
||||
it.isVarArgs || it.name == "value"
|
||||
}
|
||||
else -> false
|
||||
} ?: false
|
||||
}
|
||||
|
||||
|
||||
fun JKExpression.asStatement(): JKExpressionStatement =
|
||||
JKExpressionStatementImpl(this)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user