New J2K: Cleanup element impls to reference nested elements via delegates

This commit is contained in:
Simon Ogorodnik
2018-05-28 19:09:56 +03:00
committed by Ilya Kirillov
parent 9f7146d8b9
commit 77b6eca76e
4 changed files with 89 additions and 61 deletions
@@ -241,8 +241,11 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
fun PsiMethod.toJK(): JKJavaMethod {
return JKJavaMethodImpl(
with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name),
parameterList.parameters.map { it -> it.toJK() }, body?.toJK() ?: TODO()
with(modifierMapper) { modifierList.toJK() },
with(expressionTreeMapper) { returnTypeElement?.toJK() ?: TODO() },
JKNameIdentifierImpl(name),
parameterList.parameters.map { it -> it.toJK() },
body?.toJK() ?: TODO()
).also {
(symbolProvider.provideSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
}
@@ -37,22 +37,28 @@ class JKJavaFieldImpl(
}
class JKJavaMethodImpl(
override var modifierList: JKModifierList,
override var name: JKNameIdentifier,
override var valueArguments: List<JKValueArgument>,
override var block: JKBlock
) : JKJavaMethod, JKElementBase() {
override val returnType: JKTypeElement
get() = TODO()
modifierList: JKModifierList,
returnType: JKTypeElement,
name: JKNameIdentifier,
valueArguments: List<JKValueArgument>,
block: JKBlock
) : JKJavaMethod, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
override var modifierList: JKModifierList by child(modifierList)
override var returnType: JKTypeElement by child(returnType)
override var name: JKNameIdentifier by child(name)
override var valueArguments: List<JKValueArgument> by children(valueArguments)
override var block: JKBlock by child(block)
override val valid: Boolean
get() = true
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
}
class JKJavaLiteralExpressionImpl(
override val literal: String, override val type: JKLiteralExpression.LiteralType
override val literal: String,
override val type: JKLiteralExpression.LiteralType
) : JKJavaLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLiteralExpression(this, data)
}
@@ -76,9 +82,12 @@ sealed class JKJavaQualifierImpl : JKQualifier {
}
class JKJavaMethodCallExpressionImpl(
override var identifier: JKMethodSymbol, override var arguments: JKExpressionList
) : JKJavaMethodCallExpression, JKElementBase() {
override var identifier: JKMethodSymbol,
arguments: JKExpressionList
) : JKJavaMethodCallExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodCallExpression(this, data)
override val arguments: JKExpressionList by child(arguments)
}
class JKJavaFieldAccessExpressionImpl(override var identifier: JKFieldSymbol) : JKJavaFieldAccessExpression, JKElementBase() {
@@ -112,7 +121,7 @@ class JKJavaArrayTypeImpl(override val type: JKType) : JKJavaArrayType
class JKReturnStatementImpl(expression: JKExpression) : JKBranchElementBase(), JKReturnStatement {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitReturnStatement(this, data)
// TODO accept
override val expression by child(expression)
}
@@ -121,6 +130,8 @@ class JKJavaAssignmentExpressionImpl(
rExpression: JKExpression/*,
TODO operation:? */
) : JKBranchElementBase(), JKJavaAssignmentExpression {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaAssignmentExpression(this, data)
override var lExpression: JKExpression by child(lExpression)
override var rExpression: JKExpression by child(rExpression)
}
@@ -20,95 +20,112 @@ import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
class JKClassImpl(modifierList: JKModifierList, name: JKNameIdentifier, override var classKind: JKClass.ClassKind) :
JKClass,
JKBranchElementBase() {
class JKClassImpl(
modifierList: JKModifierList,
name: JKNameIdentifier,
override var classKind: JKClass.ClassKind
) : JKClass, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
override val name by child(name)
override var name by child(name)
override var modifierList by child(modifierList)
override val valid: Boolean = true
override var declarationList by children<JKDeclaration>()
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
override val valid: Boolean = true
}
class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase() {}
class JKModifierListImpl(modifiers: List<JKModifier> = emptyList()) : JKModifierList, JKBranchElementBase() {
override var modifiers: List<JKModifier> by children(modifiers)
class JKModifierListImpl(
modifiers: List<JKModifier> = emptyList()
) : JKModifierList, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitModifierList(this, data)
override var modifiers: List<JKModifier> by children(modifiers)
}
class JKValueArgumentImpl(type: JKTypeElement, override val name: String) : JKValueArgument, JKBranchElementBase() {
override var type by child(type)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitValueArgument(this, data)
override var type by child(type)
}
class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock, JKBranchElementBase() {
override var statements by children(statements)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
override var statements by children(statements)
}
class JKBinaryExpressionImpl(left: JKExpression, right: JKExpression, override var operator: JKOperator) : JKBinaryExpression,
class JKBinaryExpressionImpl(
left: JKExpression,
right: JKExpression,
override var operator: JKOperator
) : JKBinaryExpression,
JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBinaryExpression(this, data)
override var right by child(right)
override var left by child(left)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBinaryExpression(this, data)
}
class JKPrefixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPrefixExpression, JKBranchElementBase() {
override var expression by child(expression)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPrefixExpression(this, data)
override var expression by child(expression)
}
class JKPostfixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPostfixExpression, JKBranchElementBase() {
override var expression by child(expression)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPostfixExpression(this, data)
override var expression by child(expression)
}
class JKExpressionListImpl(expressions: List<JKExpression> = emptyList()) : JKExpressionList, JKBranchElementBase() {
override var expressions by children(expressions)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionList(this, data)
override var expressions by children(expressions)
}
class JKQualifiedExpressionImpl(
override var receiver: JKExpression, override var operator: JKQualifier, override var selector: JKExpression
) : JKQualifiedExpression, JKElementBase() {
receiver: JKExpression,
override var operator: JKQualifier,
selector: JKExpression
) : JKQualifiedExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitQualifiedExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
receiver.accept(visitor, data)
selector.accept(visitor, data)
}
override var receiver: JKExpression by child(receiver)
override var selector: JKExpression by child(selector)
}
class JKExpressionStatementImpl(override val expression: JKExpression) : JKExpressionStatement, JKElementBase() {
class JKExpressionStatementImpl(
expression: JKExpression
) : JKExpressionStatement, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionStatement(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
expression.accept(visitor, data)
}
override val expression: JKExpression by child(expression)
}
class JKArrayAccessExpressionImpl(override var expression: JKExpression, override var indexExpression: JKExpression) :
JKArrayAccessExpression, JKElementBase() {
class JKArrayAccessExpressionImpl(
expression: JKExpression,
indexExpression: JKExpression
) : JKArrayAccessExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitArrayAccessExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
expression.accept(visitor, data)
indexExpression.accept(visitor, data)
}
override var expression: JKExpression by child(expression)
override var indexExpression: JKExpression by child(indexExpression)
}
class JKParenthesizedExpressionImpl(override var expression: JKExpression) : JKParenthesizedExpression, JKBranchElementBase() {
class JKParenthesizedExpressionImpl(expression: JKExpression) : JKParenthesizedExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParenthesizedExpression(this, data)
override var expression: JKExpression by child(expression)
}
class JKTypeCastExpressionImpl(override var expression: JKExpression, type: JKTypeElement) : JKTypeCastExpression,
JKBranchElementBase() {
override var type by child(type)
class JKTypeCastExpressionImpl(override var expression: JKExpression, type: JKTypeElement) : JKTypeCastExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeCastExpression(this, data)
override var type by child(type)
}
class JKTypeElementImpl(override val type: JKType) : JKTypeElement, JKElementBase()
@@ -63,24 +63,21 @@ sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() {
class JKKtCallExpressionImpl(
override val identifier: JKMethodSymbol,
override val arguments: JKExpressionList
) : JKKtMethodCallExpression, JKElementBase() {
arguments: JKExpressionList
) : JKKtMethodCallExpression, JKBranchElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtMethodCallExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
arguments.accept(visitor, data)
}
override var arguments: JKExpressionList by child(arguments)
}
class JKKtFieldAccessExpressionImpl(override val identifier: JKFieldSymbol) : JKKtFieldAccessExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFieldAccessExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
}
}
class JKKtLiteralExpressionImpl(override val literal: String, override val type: JKLiteralExpression.LiteralType) : JKKtLiteralExpression,
class JKKtLiteralExpressionImpl(
override val literal: String,
override val type: JKLiteralExpression.LiteralType
) : JKKtLiteralExpression,
JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data)
}