New J2K: correctly convert compound Java assignment expression

#KT-35476 fixed
This commit is contained in:
Ilya Kirillov
2020-01-09 16:30:59 +03:00
parent 6a8a68a263
commit 7bfad12e6a
6 changed files with 46 additions and 2 deletions
@@ -6,8 +6,8 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parenthesizeIfBinaryExpression
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class AssignmentExpressionUnfoldingConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
@@ -141,7 +141,7 @@ class AssignmentExpressionUnfoldingConversion(context: NewJ2kConverterContext) :
field,
JKBinaryExpression(
field.copyTreeAndDetach(),
expression,
expression.parenthesizeIfBinaryExpression(),
JKKtOperatorImpl(
onlyJavaAssignTokensToKotlinOnes[operator.token]!!,
operator.returnType
@@ -0,0 +1,7 @@
public class J {
public static void main(String[] args) {
boolean a = false, b = true, c = false;
c &= a || b;
System.out.print(c);
}
}
@@ -0,0 +1,10 @@
object J {
@JvmStatic
fun main(args: Array<String>) {
val a = false
val b = true
var c = false
c = c and (a || b)
print(c)
}
}
@@ -0,0 +1,7 @@
public class J {
public static void main(String[] args) {
int a = 0, b = 1, c = 2;
c ^= a & b;
System.out.print(c);
}
}
@@ -0,0 +1,10 @@
object J {
@JvmStatic
fun main(args: Array<String>) {
val a = 0
val b = 1
var c = 2
c = c xor (a and b)
print(c)
}
}
@@ -441,6 +441,16 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew
runTest("nj2k/testData/newJ2k/assignmentExpression/bitOperationPriorityComments.java");
}
@TestMetadata("compoundAssignmentPriority.java")
public void testCompoundAssignmentPriority() throws Exception {
runTest("nj2k/testData/newJ2k/assignmentExpression/compoundAssignmentPriority.java");
}
@TestMetadata("compoundAssignmentPriority2.java")
public void testCompoundAssignmentPriority2() throws Exception {
runTest("nj2k/testData/newJ2k/assignmentExpression/compoundAssignmentPriority2.java");
}
@TestMetadata("declarationAssignmentsChain.java")
public void testDeclarationAssignmentsChain() throws Exception {
runTest("nj2k/testData/newJ2k/assignmentExpression/declarationAssignmentsChain.java");