diff --git a/src/org/jetbrains/jet/j2k/Converter.kt b/src/org/jetbrains/jet/j2k/Converter.kt index 234a1e76247..58b16d76d90 100644 --- a/src/org/jetbrains/jet/j2k/Converter.kt +++ b/src/org/jetbrains/jet/j2k/Converter.kt @@ -465,7 +465,7 @@ public open class Converter() { { val conversion: String? = PRIMITIVE_TYPE_CONVERSIONS.get(expectedType?.getCanonicalText()) if (conversion != null) { - expression = DummyMethodCallExpression(expression, conversion, Identifier.EMPTY_IDENTIFIER) + expression = MethodCallExpression.build(expression, conversion) } } @@ -476,7 +476,7 @@ public open class Converter() { class object { public val NOT_NULL_ANNOTATIONS: Set = ImmutableSet.of("org.jetbrains.annotations.NotNull", "com.sun.istack.internal.NotNull", "javax.annotation.Nonnull")!! - private val PRIMITIVE_TYPE_CONVERSIONS: Map = ImmutableMap.builder() + public val PRIMITIVE_TYPE_CONVERSIONS: Map = ImmutableMap.builder() ?.put("byte", BYTE.getName()) ?.put("short", SHORT.getName()) ?.put("int", INT.getName()) diff --git a/src/org/jetbrains/jet/j2k/ast/DummyMethodCallExpression.kt b/src/org/jetbrains/jet/j2k/ast/DummyMethodCallExpression.kt deleted file mode 100644 index f9e70457167..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/DummyMethodCallExpression.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.jetbrains.jet.j2k.ast - - -public open class DummyMethodCallExpression(val who: Element, val methodName: String, val what: Element): Expression() { - public override fun toKotlin(): String { - return who.toKotlin() + "." + methodName + "(" + what.toKotlin() + ")" - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.kt b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.kt index c4fa9c57418..02aff9c301a 100644 --- a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.kt +++ b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.kt @@ -14,4 +14,12 @@ public open class MethodCallExpression(val methodCall: Expression, val argumentsMapped = arguments.map { it.toKotlin() } return methodCall.toKotlin() + typeParamsToKotlin + "(" + argumentsMapped.makeString(", ") + ")" } + + class object { + fun build(receiver: Expression, methodName: String, arguments: List = arrayList()): MethodCallExpression { + return MethodCallExpression(CallChainExpression(receiver, Identifier(methodName, false)), + arguments, + arrayList(), false) + } + } } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 42ad8381358..ae609f1eb29 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -59,7 +59,7 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv val lhs = getConverter().expressionToExpression(expression?.getLOperand()!!, expression?.getType()) val rhs = getConverter().expressionToExpression(expression?.getROperand(), expression?.getType()) if (expression?.getOperationSign()?.getTokenType() == JavaTokenType.GTGTGT) { - myResult = DummyMethodCallExpression(lhs, "ushr", rhs) + myResult = MethodCallExpression.build(lhs, "ushr", arrayList(rhs)) } else { myResult = BinaryExpression(lhs, rhs, @@ -204,7 +204,7 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv val operand = getConverter().expressionToExpression(expression?.getOperand(), expression?.getOperand()!!.getType()) val token = expression?.getOperationTokenType()!! if (token == JavaTokenType.TILDE) { - myResult = DummyMethodCallExpression(ParenthesizedExpression(operand), "inv", Expression.EMPTY_EXPRESSION) + myResult = MethodCallExpression.build(ParenthesizedExpression(operand), "inv", arrayList()) } else { myResult = PrefixOperator(getOperatorString(token), operand) diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitorForDirectObjectInheritors.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitorForDirectObjectInheritors.kt index 4013025d86e..1e1593f6933 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitorForDirectObjectInheritors.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitorForDirectObjectInheritors.kt @@ -2,19 +2,19 @@ package org.jetbrains.jet.j2k.visitors import com.intellij.psi.* import org.jetbrains.jet.j2k.Converter -import org.jetbrains.jet.j2k.ast.DummyMethodCallExpression import org.jetbrains.jet.j2k.ast.DummyStringExpression import org.jetbrains.jet.j2k.ast.Identifier import com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT +import org.jetbrains.jet.j2k.ast.MethodCallExpression public open class ExpressionVisitorForDirectObjectInheritors(converter: Converter): ExpressionVisitor(converter) { public override fun visitMethodCallExpression(expression: PsiMethodCallExpression?): Unit { val methodExpression = expression?.getMethodExpression()!! if (superMethodInvocation(methodExpression, "hashCode")) { - myResult = DummyMethodCallExpression(Identifier("System"), "identityHashCode", Identifier("this")) + myResult = MethodCallExpression.build(Identifier("System", false), "identityHashCode", arrayList(Identifier("this"))) } else if (superMethodInvocation(methodExpression, "equals")) { - myResult = DummyMethodCallExpression(Identifier("this"), "identityEquals", getConverter().elementToElement(expression?.getArgumentList())) + myResult = MethodCallExpression.build(Identifier("this", false), "identityEquals", getConverter().argumentsToExpressionList(expression!!)) } else if (superMethodInvocation(methodExpression, "toString")) { myResult = DummyStringExpression(String.format("getJavaClass<%s>.getName() + '@' + Integer.toHexString(hashCode())", diff --git a/tests/testData/ast/issues/file/kt-543-boxed.kt b/tests/testData/ast/issues/file/kt-543-boxed.kt index a27057b7c65..8744235cc24 100644 --- a/tests/testData/ast/issues/file/kt-543-boxed.kt +++ b/tests/testData/ast/issues/file/kt-543-boxed.kt @@ -6,6 +6,6 @@ open fun test() : Unit { var b : Byte = 10 putInt(b.toInt()) var b2 : Byte? = 10 -putInt(b2.toInt()) +putInt(b2?.toInt()) } } \ No newline at end of file