From 77b6eca76e91a1af9ba6854aed362077f3361324 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Mon, 28 May 2018 19:09:56 +0300 Subject: [PATCH] New J2K: Cleanup element impls to reference nested elements via delegates --- .../kotlin/j2k/JavaToJKTreeBuilder.kt | 7 +- .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 37 +++++--- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 89 +++++++++++-------- .../org/jetbrains/kotlin/j2k/tree/impl/k.kt | 17 ++-- 4 files changed, 89 insertions(+), 61 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 6de36ce42a4..0a2c9a365ac 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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 } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index b91d11d5638..e79f406ac6d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -37,22 +37,28 @@ class JKJavaFieldImpl( } class JKJavaMethodImpl( - override var modifierList: JKModifierList, - override var name: JKNameIdentifier, - override var valueArguments: List, - override var block: JKBlock -) : JKJavaMethod, JKElementBase() { - override val returnType: JKTypeElement - get() = TODO() + modifierList: JKModifierList, + returnType: JKTypeElement, + name: JKNameIdentifier, + valueArguments: List, + block: JKBlock +) : JKJavaMethod, JKBranchElementBase() { + + override fun accept(visitor: JKVisitor, 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 by children(valueArguments) + override var block: JKBlock by child(block) override val valid: Boolean get() = true - - override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaAssignmentExpression(this, data) + override var lExpression: JKExpression by child(lExpression) override var rExpression: JKExpression by child(rExpression) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index b7f92e191a2..43f2655afc5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -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 accept(visitor: JKVisitor, 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() - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClass(this, data) + override val valid: Boolean = true } class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase() {} -class JKModifierListImpl(modifiers: List = emptyList()) : JKModifierList, JKBranchElementBase() { - override var modifiers: List by children(modifiers) +class JKModifierListImpl( + modifiers: List = emptyList() +) : JKModifierList, JKBranchElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitModifierList(this, data) + + override var modifiers: List by children(modifiers) } class JKValueArgumentImpl(type: JKTypeElement, override val name: String) : JKValueArgument, JKBranchElementBase() { - override var type by child(type) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitValueArgument(this, data) + + override var type by child(type) } class JKBlockImpl(statements: List = emptyList()) : JKBlock, JKBranchElementBase() { - override var statements by children(statements) override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitBinaryExpression(this, data) + override var right by child(right) override var left by child(left) - override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitPostfixExpression(this, data) + + override var expression by child(expression) } class JKExpressionListImpl(expressions: List = emptyList()) : JKExpressionList, JKBranchElementBase() { - override var expressions by children(expressions) override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitQualifiedExpression(this, data) - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitExpressionStatement(this, data) - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitArrayAccessExpression(this, data) - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitTypeCastExpression(this, data) + + override var type by child(type) } class JKTypeElementImpl(override val type: JKType) : JKTypeElement, JKElementBase() diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index fbb0214dff8..25d55d2110e 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -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 accept(visitor: JKVisitor, data: D): R = visitor.visitKtMethodCallExpression(this, data) - override fun acceptChildren(visitor: JKVisitor, data: D) { - arguments.accept(visitor, data) - } + override var arguments: JKExpressionList by child(arguments) } class JKKtFieldAccessExpressionImpl(override val identifier: JKFieldSymbol) : JKKtFieldAccessExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtFieldAccessExpression(this, data) - - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitKtLiteralExpression(this, data) }