New J2K: Introduce type arguments
This commit is contained in:
committed by
Ilya Kirillov
parent
40c5b56c10
commit
f58d791a05
@@ -145,7 +145,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
}
|
||||
JKDelegationConstructorCallImpl(symbol, callee, argumentList.toJK())
|
||||
} else {
|
||||
val call = JKJavaMethodCallExpressionImpl(symbol, argumentList.toJK())
|
||||
val call = JKJavaMethodCallExpressionImpl(symbol, argumentList.toJK(), typeArgumentList.toJK())
|
||||
if (method.findChildByRole(ChildRole.DOT) != null) {
|
||||
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call)
|
||||
} else {
|
||||
@@ -207,10 +207,15 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
|
||||
return JKJavaNewExpressionImpl(
|
||||
symbolProvider.provideDirectSymbol(constructor!!) as JKMethodSymbol,
|
||||
argumentList.toJK()
|
||||
argumentList.toJK(),
|
||||
typeArgumentList.toJK()
|
||||
)
|
||||
}
|
||||
|
||||
fun PsiReferenceParameterList.toJK(): JKTypeArgumentList =
|
||||
JKTypeArgumentListImpl(this.typeArguments.map { JKTypeElementImpl(it.toJK(symbolProvider)) })
|
||||
|
||||
|
||||
fun PsiArrayAccessExpression.toJK(): JKExpression {
|
||||
return JKArrayAccessExpressionImpl(arrayExpression.toJK(), indexExpression?.toJK() ?: TODO())
|
||||
}
|
||||
|
||||
@@ -506,16 +506,22 @@ class NewCodeBuilder {
|
||||
|
||||
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) {
|
||||
printer.printWithNoIndent(FqName(methodCallExpression.identifier.fqName).shortName().asString())
|
||||
if (methodCallExpression.typeArguments.isNotEmpty()) {
|
||||
printer.par(ANGLE) {
|
||||
renderList(methodCallExpression.typeArguments) { it.accept(this) }
|
||||
}
|
||||
}
|
||||
methodCallExpression.typeArgumentList.accept(this)
|
||||
printer.par {
|
||||
methodCallExpression.arguments.accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitTypeArgumentList(typeArgumentList: JKTypeArgumentList) {
|
||||
if (typeArgumentList.typeArguments.isNotEmpty()) {
|
||||
printer.par(ANGLE) {
|
||||
renderList(typeArgumentList.typeArguments) {
|
||||
it.accept(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression) {
|
||||
printer.par {
|
||||
parenthesizedExpression.expression.accept(this)
|
||||
@@ -613,11 +619,10 @@ class NewCodeBuilder {
|
||||
}
|
||||
|
||||
override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) {
|
||||
printer.printWithNoIndent(FqName(javaNewExpression.constructorSymbol.fqName).shortName())
|
||||
printer.printWithNoIndent(javaNewExpression.identifier.name)
|
||||
javaNewExpression.typeArgumentList.accept(this)
|
||||
printer.par(ROUND) {
|
||||
renderList(javaNewExpression.arguments.expressions, ", ") {
|
||||
it.accept(this)
|
||||
}
|
||||
javaNewExpression.arguments.accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -797,7 +802,7 @@ class NewCodeBuilder {
|
||||
}
|
||||
|
||||
override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) {
|
||||
val psiConstructor = javaNewExpression.constructorSymbol.target
|
||||
val psiConstructor = javaNewExpression.identifier.target
|
||||
val fqName = when (psiConstructor) {
|
||||
is PsiMethod -> psiConstructor.containingClass?.getKotlinFqName()!!
|
||||
is KtFunction -> psiConstructor.containingClassOrObject?.fqName!!
|
||||
|
||||
@@ -44,7 +44,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
|
||||
return JKJavaMethodCallExpressionImpl(
|
||||
methodOrConstructorReference,
|
||||
JKExpressionListImpl(dimensions[0]),
|
||||
if (type is JKJavaPrimitiveType) emptyList() else listOf(JKTypeElementImpl(type))
|
||||
JKTypeArgumentListImpl(if (type is JKJavaPrimitiveType) emptyList() else listOf(JKTypeElementImpl(type)))
|
||||
)
|
||||
}
|
||||
if (dimensions[1] !is JKStubExpression) {
|
||||
@@ -73,7 +73,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
|
||||
return JKJavaMethodCallExpressionImpl(
|
||||
context.symbolProvider.provideByFqName("kotlin/arrayOfNulls"),
|
||||
JKExpressionListImpl(dimensions[0]),
|
||||
listOf(JKTypeElementImpl(resultType))
|
||||
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType)))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -184,22 +184,22 @@ sealed class JKJavaQualifierImpl : JKQualifier {
|
||||
class JKJavaMethodCallExpressionImpl(
|
||||
override var identifier: JKMethodSymbol,
|
||||
arguments: JKExpressionList,
|
||||
typeArguments: List<JKTypeElement> = emptyList()
|
||||
typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl()
|
||||
) : JKJavaMethodCallExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodCallExpression(this, data)
|
||||
|
||||
override val arguments: JKExpressionList by child(arguments)
|
||||
override var typeArguments: List<JKTypeElement> by children(typeArguments)
|
||||
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
||||
}
|
||||
|
||||
|
||||
class JKJavaNewExpressionImpl(
|
||||
override val constructorSymbol: JKMethodSymbol,
|
||||
arguments: JKExpressionList
|
||||
override var identifier: JKMethodSymbol,
|
||||
arguments: JKExpressionList,
|
||||
typeArgumentList: JKTypeArgumentList
|
||||
) : JKJavaNewExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override val arguments: JKExpressionList by child(arguments)
|
||||
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewExpression(this, data)
|
||||
|
||||
override var arguments by child(arguments)
|
||||
}
|
||||
|
||||
class JKJavaDefaultNewExpressionImpl(
|
||||
|
||||
@@ -396,12 +396,13 @@ class JKInheritanceInfoImpl(implements: List<JKTypeElement>) : JKInheritanceInfo
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitInheritanceInfo(this, data)
|
||||
}
|
||||
|
||||
|
||||
class JKDelegationConstructorCallImpl(
|
||||
override val identifier: JKMethodSymbol,
|
||||
expression: JKExpression,
|
||||
arguments: JKExpressionList
|
||||
) : JKBranchElementBase(), JKDelegationConstructorCall, PsiOwner by PsiOwnerImpl() {
|
||||
override var typeArguments by children(emptyList<JKTypeElement>())
|
||||
override var typeArgumentList: JKTypeArgumentList by child(JKTypeArgumentListImpl())
|
||||
override val expression: JKExpression by child(expression)
|
||||
override val arguments: JKExpressionList by child(arguments)
|
||||
|
||||
@@ -516,4 +517,11 @@ class JKAnnotationListImpl(annotations: List<JKAnnotation> = emptyList()) : JKAn
|
||||
class JKAnnotationImpl(name: JKNameIdentifier) : JKAnnotation, JKBranchElementBase() {
|
||||
override var name: JKNameIdentifier by child(name)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
|
||||
}
|
||||
|
||||
class JKTypeArgumentListImpl(typeArguments: List<JKTypeElement> = emptyList()) : JKTypeArgumentList, JKBranchElementBase(),
|
||||
PsiOwner by PsiOwnerImpl() {
|
||||
override val typeArguments: List<JKTypeElement> by children(typeArguments)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeArgumentList(this, data)
|
||||
|
||||
}
|
||||
@@ -71,12 +71,12 @@ sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() {
|
||||
class JKKtCallExpressionImpl(
|
||||
override val identifier: JKMethodSymbol,
|
||||
arguments: JKExpressionList,
|
||||
typeArguments: List<JKTypeElement> = emptyList()
|
||||
typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl()
|
||||
) : JKKtMethodCallExpression, JKBranchElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtMethodCallExpression(this, data)
|
||||
|
||||
override var arguments: JKExpressionList by child(arguments)
|
||||
override var typeArguments: List<JKTypeElement> by children(typeArguments)
|
||||
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
||||
}
|
||||
|
||||
class JKKtLiteralExpressionImpl(
|
||||
@@ -115,7 +115,10 @@ class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtMod
|
||||
}
|
||||
|
||||
class JKKtAlsoCallExpressionImpl(
|
||||
statement: JKStatement, override val identifier: JKMethodSymbol, override val parameterName: String = "it"
|
||||
statement: JKStatement,
|
||||
override val identifier: JKMethodSymbol,
|
||||
override val parameterName: String = "it",
|
||||
typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl()
|
||||
) : JKKtAlsoCallExpression, JKBranchElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAlsoCallExpression(this, data)
|
||||
override var statement
|
||||
@@ -140,7 +143,7 @@ class JKKtAlsoCallExpressionImpl(
|
||||
)
|
||||
)
|
||||
)
|
||||
override var typeArguments: List<JKTypeElement> by children(emptyList())
|
||||
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
||||
}
|
||||
|
||||
class JKKtAssignmentStatementImpl(
|
||||
@@ -285,4 +288,22 @@ class JKKtTryCatchSectionImpl(
|
||||
override var parameter: JKParameter by child(parameter)
|
||||
override var block: JKBlock by child(block)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtTryCatchSection(this, data)
|
||||
}
|
||||
|
||||
class JKKtGetterOrSetterImpl(
|
||||
body: JKStatement,
|
||||
modifierList: JKModifierList,
|
||||
override val kind: JKKtGetterOrSetter.Kind
|
||||
) : JKKtGetterOrSetter, JKBranchElementBase() {
|
||||
override var body: JKStatement by child(body)
|
||||
override var modifierList: JKModifierList by child(modifierList)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtGetterOrSetter(this, data)
|
||||
}
|
||||
|
||||
class JKKtEmptyGetterOrSetterImpl : JKKtEmptyGetterOrSetter, JKBranchElementBase() {
|
||||
override var body: JKStatement by child(JKEmptyStatementImpl())
|
||||
override var modifierList: JKModifierList by child(JKModifierListImpl())
|
||||
override val kind: JKKtGetterOrSetter.Kind
|
||||
get() = error("Cannot get kind of JKKtEmptyGetterOrSetter")
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtEmptyGetterOrSetter(this, data)
|
||||
}
|
||||
@@ -26,10 +26,7 @@ interface JKJavaMethod : JKMethod, JKBranchElement {
|
||||
|
||||
interface JKJavaMethodCallExpression : JKMethodCallExpression
|
||||
|
||||
interface JKJavaNewExpression : JKExpression {
|
||||
val constructorSymbol: JKMethodSymbol
|
||||
val arguments: JKExpressionList
|
||||
}
|
||||
interface JKJavaNewExpression : JKMethodCallExpression
|
||||
|
||||
interface JKJavaDefaultNewExpression : JKExpression {
|
||||
val classSymbol: JKClassSymbol
|
||||
|
||||
@@ -164,10 +164,17 @@ interface JKQualifiedExpression : JKExpression, JKAssignableExpression {
|
||||
var selector: JKExpression
|
||||
}
|
||||
|
||||
interface JKMethodCallExpression : JKExpression, JKBranchElement {
|
||||
interface JKTypeArgumentList : JKTreeElement {
|
||||
val typeArguments: List<JKTypeElement>
|
||||
}
|
||||
|
||||
interface JKTypeArgumentListOwner : JKTreeElement {
|
||||
var typeArgumentList: JKTypeArgumentList
|
||||
}
|
||||
|
||||
interface JKMethodCallExpression : JKExpression, JKTypeArgumentListOwner, JKBranchElement {
|
||||
val identifier: JKMethodSymbol
|
||||
val arguments: JKExpressionList
|
||||
var typeArguments: List<JKTypeElement>
|
||||
}
|
||||
|
||||
interface JKFieldAccessExpression : JKAssignableExpression {
|
||||
|
||||
@@ -33,6 +33,8 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitPrefixExpression(prefixExpression: JKPrefixExpression, data: D): R = visitUnaryExpression(prefixExpression, data)
|
||||
fun visitPostfixExpression(postfixExpression: JKPostfixExpression, data: D): R = visitUnaryExpression(postfixExpression, data)
|
||||
fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression, data: D): R = visitExpression(qualifiedExpression, data)
|
||||
fun visitTypeArgumentList(typeArgumentList: JKTypeArgumentList, data: D): R = visitTreeElement(typeArgumentList, data)
|
||||
fun visitTypeArgumentListOwner(typeArgumentListOwner: JKTypeArgumentListOwner, data: D): R = visitTreeElement(typeArgumentListOwner, data)
|
||||
fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: D): R = visitExpression(methodCallExpression, data)
|
||||
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: D): R = visitAssignableExpression(fieldAccessExpression, data)
|
||||
fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression, data: D): R = visitExpression(classAccessExpression, data)
|
||||
@@ -73,7 +75,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data)
|
||||
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
|
||||
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data)
|
||||
fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: D): R = visitExpression(javaNewExpression, data)
|
||||
fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: D): R = visitMethodCallExpression(javaNewExpression, data)
|
||||
fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: D): R = visitExpression(javaDefaultNewExpression, data)
|
||||
fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data)
|
||||
fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data)
|
||||
|
||||
@@ -63,6 +63,10 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression, data: Nothing?) = visitPostfixExpression(postfixExpression)
|
||||
fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) = visitExpression(qualifiedExpression, null)
|
||||
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression, data: Nothing?) = visitQualifiedExpression(qualifiedExpression)
|
||||
fun visitTypeArgumentList(typeArgumentList: JKTypeArgumentList) = visitTreeElement(typeArgumentList, null)
|
||||
override fun visitTypeArgumentList(typeArgumentList: JKTypeArgumentList, data: Nothing?) = visitTypeArgumentList(typeArgumentList)
|
||||
fun visitTypeArgumentListOwner(typeArgumentListOwner: JKTypeArgumentListOwner) = visitTreeElement(typeArgumentListOwner, null)
|
||||
override fun visitTypeArgumentListOwner(typeArgumentListOwner: JKTypeArgumentListOwner, data: Nothing?) = visitTypeArgumentListOwner(typeArgumentListOwner)
|
||||
fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) = visitExpression(methodCallExpression, null)
|
||||
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: Nothing?) = visitMethodCallExpression(methodCallExpression)
|
||||
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) = visitAssignableExpression(fieldAccessExpression, null)
|
||||
@@ -143,7 +147,7 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod)
|
||||
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression) = visitMethodCallExpression(javaMethodCallExpression, null)
|
||||
override fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: Nothing?) = visitJavaMethodCallExpression(javaMethodCallExpression)
|
||||
fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) = visitExpression(javaNewExpression, null)
|
||||
fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) = visitMethodCallExpression(javaNewExpression, null)
|
||||
override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: Nothing?) = visitJavaNewExpression(javaNewExpression)
|
||||
fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression) = visitExpression(javaDefaultNewExpression, null)
|
||||
override fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: Nothing?) = visitJavaDefaultNewExpression(javaDefaultNewExpression)
|
||||
|
||||
Reference in New Issue
Block a user