New J2K: Add support of vararg parameters in method declaration

This commit is contained in:
Ilya Kirillov
2018-12-24 12:11:21 +03:00
committed by Ilya Kirillov
parent 6fbc180f92
commit bbbadb0431
4 changed files with 14 additions and 3 deletions
@@ -506,9 +506,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
}
fun PsiParameter.toJK(): JKParameter {
val rawType = with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl)
val type =
if (isVarArgs && rawType.type is JKJavaArrayType) JKTypeElementImpl((rawType.type as JKJavaArrayType).type)
else rawType
return JKParameterImpl(
with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl),
JKNameIdentifierImpl(name!!)
type,
JKNameIdentifierImpl(name!!),
isVarArgs
).also {
symbolProvider.provideUniverseSymbol(this, it)
it.psi = this
@@ -299,6 +299,9 @@ class NewCodeBuilder {
override fun visitParameter(parameter: JKParameter) {
renderModifiersList(parameter)
printer.printWithNoIndent(" ")
if (parameter.isVarArgs) {
printer.printWithNoIndent("vararg ")
}
parameter.name.accept(this)
if (parameter.type.present() && parameter.type.type !is JKContextType) {
printer.printWithNoIndent(":")
@@ -83,6 +83,7 @@ class JKForLoopVariableImpl(
class JKParameterImpl(
type: JKTypeElement,
name: JKNameIdentifier,
override var isVarArgs: Boolean = false,
initializer: JKExpression = JKStubExpressionImpl()
) : JKParameter, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParameter(this, data)
@@ -287,7 +287,9 @@ interface JKLiteralExpression : JKExpression {
}
}
interface JKParameter : JKVariable, JKModifiersListOwner
interface JKParameter : JKVariable, JKModifiersListOwner {
var isVarArgs: Boolean
}
interface JKStringLiteralExpression : JKLiteralExpression {
val text: String