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.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.isVarargsArgument
|
import org.jetbrains.kotlin.nj2k.isVarargsArgument
|
||||||
import org.jetbrains.kotlin.nj2k.primaryConstructor
|
|
||||||
import org.jetbrains.kotlin.nj2k.toExpression
|
import org.jetbrains.kotlin.nj2k.toExpression
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationNameParameterImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationNameParameterImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationParameterImpl
|
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() {
|
class AnnotationConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
@@ -36,6 +36,17 @@ class AnnotationConversion(private val context: ConversionContext) : RecursiveAp
|
|||||||
(annotationParameter.value as JKKtAnnotationArrayInitializerExpression)::initializers
|
(annotationParameter.value as JKKtAnnotationArrayInitializerExpression)::initializers
|
||||||
.detached()
|
.detached()
|
||||||
.map { JKAnnotationParameterImpl(it) }
|
.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 ->
|
annotationParameter is JKAnnotationNameParameterImpl ->
|
||||||
listOf(
|
listOf(
|
||||||
JKAnnotationNameParameterImpl(
|
JKAnnotationNameParameterImpl(
|
||||||
|
|||||||
@@ -557,7 +557,14 @@ fun JKAnnotation.isVarargsArgument(index: Int): Boolean {
|
|||||||
val target = classSymbol.target
|
val target = classSymbol.target
|
||||||
return when (target) {
|
return when (target) {
|
||||||
is JKClass -> target.primaryConstructor()?.parameters?.getOrNull(index)?.isVarArgs
|
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
|
else -> false
|
||||||
} ?: false
|
} ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun JKExpression.asStatement(): JKExpressionStatement =
|
||||||
|
JKExpressionStatementImpl(this)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user