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 { 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 { fun PsiBinaryExpression.toJK(): JKExpression {
@@ -110,7 +114,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
fun PsiMethodCallExpression.toJK(): JKExpression { fun PsiMethodCallExpression.toJK(): JKExpression {
val method = methodExpression as PsiReferenceExpressionImpl val method = methodExpression as PsiReferenceExpressionImpl
val call = JKJavaMethodCallExpressionImpl(symbolProvider.provideSymbol(method), argumentList.toJK()) val call = JKJavaMethodCallExpressionImpl(symbolProvider.provideSymbol(method), argumentList.toJK())
return if (method.findChildByRole(ChildRole.DOT) != null) { return if (method.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call) JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.j2k.conversions package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.ConversionContext 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.JKJavaAssignmentExpression
import org.jetbrains.kotlin.j2k.tree.JKTreeElement import org.jetbrains.kotlin.j2k.tree.JKTreeElement
import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.j2k.tree.impl.*
@@ -14,17 +15,15 @@ import org.jetbrains.kotlin.name.ClassId
class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() { class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement { 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 alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element, context) ?: return recurse(element)
val alsoSymbol = context.symbolProvider.provideDirectSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element) val alsoSymbol = context.symbolProvider.provideDirectSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element)
element.invalidate() element.invalidate()
return JKQualifiedExpressionImpl( return JKQualifiedExpressionImpl(
element.rExpression, element.expression,
JKKtQualifierImpl.DOT, JKKtQualifierImpl.DOT,
JKKtCallExpressionImpl(alsoSymbol, JKExpressionListImpl( JKKtCallExpressionImpl(alsoSymbol, JKExpressionListImpl(
// TODO: Lambda expression here // TODO: Lambda expression here
@@ -157,17 +157,6 @@ class JKReturnStatementImpl(expression: JKExpression) : JKBranchElementBase(), J
override val expression by child(expression) 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() { class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpression) : JKJavaAssertStatement, JKBranchElementBase() {
override val description by child(description) override val description by child(description)
override val condition by child(condition) override val condition by child(condition)
@@ -203,3 +192,13 @@ class JKJavaPolyadicExpressionImpl(operands: List<JKExpression>, override var to
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaPolyadicExpression(this, data) 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 package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol
import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol
interface JKJavaField : JKField, JKBranchElement interface JKJavaField : JKField, JKBranchElement
@@ -25,11 +26,6 @@ interface JKJavaMethod : JKMethod, JKBranchElement {
val block: JKBlock val block: JKBlock
} }
interface JKJavaAssignmentExpression : JKExpression, JKBranchElement {
var lExpression: JKExpression
var rExpression: JKExpression
}
interface JKJavaMethodCallExpression : JKMethodCallExpression interface JKJavaMethodCallExpression : JKMethodCallExpression
interface JKJavaFieldAccessExpression : JKFieldAccessExpression interface JKJavaFieldAccessExpression : JKFieldAccessExpression
@@ -87,3 +83,9 @@ interface JKJavaPolyadicExpression : JKExpression {
fun getTokenBeforeOperand(operand: JKExpression): 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 package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol
interface JKKtProperty : JKField { interface JKKtProperty : JKField {
val getter: JKBlock val getter: JKBlock
val setter: JKBlock val setter: JKBlock
@@ -29,7 +31,11 @@ interface JKKtConstructor : JKDeclaration
interface JKKtPrimaryConstructor : JKKtConstructor interface JKKtPrimaryConstructor : JKKtConstructor
interface JKKtAssignmentStatement : JKStatement interface JKKtAssignmentStatement : JKStatement{
var field: JKFieldSymbol
var expression: JKExpression
var operator: JKOperator
}
interface JKKtCall : JKMethodCallExpression interface JKKtCall : JKMethodCallExpression