From 4a0df846de2332527f12aaa8c3ed0a09df2c5aae Mon Sep 17 00:00:00 2001 From: Dimach Date: Fri, 29 Jun 2018 03:33:30 +0300 Subject: [PATCH] New J2K: Some changes to assignment expression. --- .../kotlin/j2k/JavaToJKTreeBuilder.kt | 7 +++++-- .../AssignmentAsExpressionToAlsoConversion.kt | 7 +++---- .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 21 +++++++++---------- j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt | 12 ++++++----- j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt | 8 ++++++- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 4b190b9a2f9..c559bccd65b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt index da28b6ba1bb..553629c4c25 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt @@ -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 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 c2708be8574..80b0264f169 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, 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, override var to } override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaPolyadicExpression(this, data) +} + +class JKJavaAssignmentExpressionImpl( + override var field: JKFieldSymbol, + expression: JKExpression, + override var operator: JKOperator +) : JKBranchElementBase(), JKJavaAssignmentExpression { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaAssignmentExpression(this, data) + + override var expression: JKExpression by child(expression) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 23693edc508..dba02dfcbd6 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -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 fun getTokenBeforeOperand(operand: JKExpression): JKOperator? +} + +interface JKJavaAssignmentExpression : JKExpression, JKBranchElement { + var field: JKFieldSymbol + var expression: JKExpression + var operator: JKOperator } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt index 761e9c298f5..1d490bea4b8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt @@ -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