New J2K: Some changes to assignment expression.

This commit is contained in:
Dimach
2018-06-29 03:33:30 +03:00
committed by Ilya Kirillov
parent 0078a5a61b
commit 4a0df846de
5 changed files with 32 additions and 23 deletions
@@ -74,7 +74,11 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
}
fun PsiAssignmentExpression.toJK(): JKJavaAssignmentExpression {
return JKJavaAssignmentExpressionImpl(lExpression.toJK(), rExpression.toJK())
return JKJavaAssignmentExpressionImpl(
(lExpression.toJK() as? JKFieldAccessExpression ?: error("Its possible?")).identifier,
rExpression.toJK(),
operationSign.toJK()
)
}
fun PsiBinaryExpression.toJK(): JKExpression {
@@ -110,7 +114,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
fun PsiMethodCallExpression.toJK(): JKExpression {
val method = methodExpression as PsiReferenceExpressionImpl
val call = JKJavaMethodCallExpressionImpl(symbolProvider.provideSymbol(method), argumentList.toJK())
return if (method.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.tree.JKExpressionStatement
import org.jetbrains.kotlin.j2k.tree.JKJavaAssignmentExpression
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
import org.jetbrains.kotlin.j2k.tree.impl.*
@@ -14,17 +15,15 @@ import org.jetbrains.kotlin.name.ClassId
class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element !is JKJavaAssignmentExpression) return recurse(element)
if (element !is JKJavaAssignmentExpression || element.parent !is JKExpressionStatement) return recurse(element)
// TODO: Check if inside variable initializer
//if (element.parent)
val alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element, context) ?: return recurse(element)
val alsoSymbol = context.symbolProvider.provideDirectSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element)
element.invalidate()
return JKQualifiedExpressionImpl(
element.rExpression,
element.expression,
JKKtQualifierImpl.DOT,
JKKtCallExpressionImpl(alsoSymbol, JKExpressionListImpl(
// TODO: Lambda expression here
@@ -157,17 +157,6 @@ class JKReturnStatementImpl(expression: JKExpression) : JKBranchElementBase(), J
override val expression by child(expression)
}
class JKJavaAssignmentExpressionImpl(
lExpression: JKExpression,
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)
}
class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpression) : JKJavaAssertStatement, JKBranchElementBase() {
override val description by child(description)
override val condition by child(condition)
@@ -202,4 +191,14 @@ class JKJavaPolyadicExpressionImpl(operands: List<JKExpression>, override var to
}
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaPolyadicExpression(this, data)
}
class JKJavaAssignmentExpressionImpl(
override var field: JKFieldSymbol,
expression: JKExpression,
override var operator: JKOperator
) : JKBranchElementBase(), JKJavaAssignmentExpression {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaAssignmentExpression(this, data)
override var expression: JKExpression by child(expression)
}
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol
import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol
interface JKJavaField : JKField, JKBranchElement
@@ -25,11 +26,6 @@ interface JKJavaMethod : JKMethod, JKBranchElement {
val block: JKBlock
}
interface JKJavaAssignmentExpression : JKExpression, JKBranchElement {
var lExpression: JKExpression
var rExpression: JKExpression
}
interface JKJavaMethodCallExpression : JKMethodCallExpression
interface JKJavaFieldAccessExpression : JKFieldAccessExpression
@@ -86,4 +82,10 @@ interface JKJavaPolyadicExpression : JKExpression {
var tokens: List<JKOperator>
fun getTokenBeforeOperand(operand: JKExpression): JKOperator?
}
interface JKJavaAssignmentExpression : JKExpression, JKBranchElement {
var field: JKFieldSymbol
var expression: JKExpression
var operator: JKOperator
}
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol
interface JKKtProperty : JKField {
val getter: JKBlock
val setter: JKBlock
@@ -29,7 +31,11 @@ interface JKKtConstructor : JKDeclaration
interface JKKtPrimaryConstructor : JKKtConstructor
interface JKKtAssignmentStatement : JKStatement
interface JKKtAssignmentStatement : JKStatement{
var field: JKFieldSymbol
var expression: JKExpression
var operator: JKOperator
}
interface JKKtCall : JKMethodCallExpression