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 { 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( return JKParameterImpl(
with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl), type,
JKNameIdentifierImpl(name!!) JKNameIdentifierImpl(name!!),
isVarArgs
).also { ).also {
symbolProvider.provideUniverseSymbol(this, it) symbolProvider.provideUniverseSymbol(this, it)
it.psi = this it.psi = this
@@ -299,6 +299,9 @@ class NewCodeBuilder {
override fun visitParameter(parameter: JKParameter) { override fun visitParameter(parameter: JKParameter) {
renderModifiersList(parameter) renderModifiersList(parameter)
printer.printWithNoIndent(" ") printer.printWithNoIndent(" ")
if (parameter.isVarArgs) {
printer.printWithNoIndent("vararg ")
}
parameter.name.accept(this) parameter.name.accept(this)
if (parameter.type.present() && parameter.type.type !is JKContextType) { if (parameter.type.present() && parameter.type.type !is JKContextType) {
printer.printWithNoIndent(":") printer.printWithNoIndent(":")
@@ -83,6 +83,7 @@ class JKForLoopVariableImpl(
class JKParameterImpl( class JKParameterImpl(
type: JKTypeElement, type: JKTypeElement,
name: JKNameIdentifier, name: JKNameIdentifier,
override var isVarArgs: Boolean = false,
initializer: JKExpression = JKStubExpressionImpl() initializer: JKExpression = JKStubExpressionImpl()
) : JKParameter, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { ) : JKParameter, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParameter(this, data) 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 { interface JKStringLiteralExpression : JKLiteralExpression {
val text: String val text: String