diff --git a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java index 0a0aab62b7b..c190d546d9c 100644 --- a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java @@ -1,6 +1,9 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.util.AstUtil; + +import java.util.List; /** * @author ignatov @@ -9,11 +12,13 @@ public class MethodCallExpression extends Expression { private final Expression myMethodCall; private final Element myParamList; private final boolean myIsResultNullable; + private List myTypeParameters; - public MethodCallExpression(Expression methodCall, Element paramList, boolean nullable) { + public MethodCallExpression(Expression methodCall, Element paramList, boolean nullable, List typeParameters) { myMethodCall = methodCall; myParamList = paramList; myIsResultNullable = nullable; + myTypeParameters = typeParameters; } @Override @@ -24,6 +29,7 @@ public class MethodCallExpression extends Expression { @NotNull @Override public String toKotlin() { - return myMethodCall.toKotlin() + "(" + myParamList.toKotlin() + ")"; + String typeParamsToKotlin = myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY; + return myMethodCall.toKotlin() + typeParamsToKotlin + "(" + myParamList.toKotlin() + ")"; } } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index ed3739adc52..f40f0dbe450 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -170,7 +170,8 @@ public class ExpressionVisitor extends StatementVisitor { new MethodCallExpression( expressionToExpression(expression.getMethodExpression()), elementToElement(expression.getArgumentList()), - typeToType(expression.getType()).isNullable() + typeToType(expression.getType()).isNullable(), + typesToTypeList(expression.getTypeArguments()) ); } @@ -206,7 +207,7 @@ public class ExpressionVisitor extends StatementVisitor { if (constructor != null && !isConstructorPrimary(constructor)) { myResult = new CallChainExpression( new IdentifierImpl(constructor.getName(), false), - new MethodCallExpression(new IdentifierImpl("init"), elementToElement(expression.getArgumentList()), false)); + new MethodCallExpression(new IdentifierImpl("init"), elementToElement(expression.getArgumentList()), false, typesToTypeList(expression.getTypeArguments()))); } } } diff --git a/testData/ast/methodCallExpression/file/genericMethod.jav b/testData/ast/methodCallExpression/file/genericMethod.jav new file mode 100644 index 00000000000..952645f5f09 --- /dev/null +++ b/testData/ast/methodCallExpression/file/genericMethod.jav @@ -0,0 +1,12 @@ +package demo; + +class Map { + void put(K k, V v) {} +} + +class U { + void test() { + Map m = new Map(); + m.put("10", 10); + } +} \ No newline at end of file diff --git a/testData/ast/methodCallExpression/file/genericMethod.kt b/testData/ast/methodCallExpression/file/genericMethod.kt new file mode 100644 index 00000000000..f965f4e78e5 --- /dev/null +++ b/testData/ast/methodCallExpression/file/genericMethod.kt @@ -0,0 +1,12 @@ +namespace demo { +open class Map() { +open fun put(k : K?, v : V?) : Unit { +} +} +open class U() { +open fun test() : Unit { +var m : Map? = Map() +m?.put("10", 10) +} +} +} \ No newline at end of file