From 69b910089033c4b705ef8a9a1838fc73fcf9e53b Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 1 Nov 2011 15:54:18 +0400 Subject: [PATCH] generic parameters for functions added --- src/org/jetbrains/jet/j2k/Converter.java | 3 +++ .../jetbrains/jet/j2k/ast/Constructor.java | 6 ++++-- src/org/jetbrains/jet/j2k/ast/Function.java | 15 ++++++++++--- .../jetbrains/jet/j2k/ast/FunctionTest.java | 21 +++++++++++++++++++ 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index d6b909a1903..8c991f8a8b0 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -87,17 +87,20 @@ public class Converter { final Type type = typeToType(method.getReturnType()); final Block body = blockToBlock(method.getBody(), notEmpty); final Element params = elementToElement(method.getParameterList()); + final List typeParameters = elementsToElementList(method.getTypeParameters()); if (method.isConstructor()) return new Constructor( identifier, type, + typeParameters, params, body ); return new Function( identifier, type, + typeParameters, params, body ); diff --git a/src/org/jetbrains/jet/j2k/ast/Constructor.java b/src/org/jetbrains/jet/j2k/ast/Constructor.java index 6f758dfe1e6..a28e306ee1b 100644 --- a/src/org/jetbrains/jet/j2k/ast/Constructor.java +++ b/src/org/jetbrains/jet/j2k/ast/Constructor.java @@ -2,12 +2,14 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import java.util.List; + /** * @author ignatov */ public class Constructor extends Function { - public Constructor(Identifier identifier, Type type, Element params, Block block) { - super(identifier, type, params, block); + public Constructor(Identifier identifier, Type type, List typeParameters, Element params, Block block) { + super(identifier, type, typeParameters, params, block); } public String primary() { diff --git a/src/org/jetbrains/jet/j2k/ast/Function.java b/src/org/jetbrains/jet/j2k/ast/Function.java index 4573c71bb24..d9aaac3e45c 100644 --- a/src/org/jetbrains/jet/j2k/ast/Function.java +++ b/src/org/jetbrains/jet/j2k/ast/Function.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 @@ -8,20 +11,26 @@ import org.jetbrains.annotations.NotNull; public class Function extends Node { private final Identifier myName; private final Type myType; + private List myTypeParameters; final Element myParams; private final Block myBlock; - public Function(Identifier name, Type type, Element params, Block block) { + public Function(Identifier name, Type type, List typeParameters, Element params, Block block) { myName = name; myType = type; + myTypeParameters = typeParameters; myParams = params; myBlock = block; } + private String typeParametersToKotlin() { + return myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY; + } + @NotNull @Override public String toKotlin() { - return "fun" + SPACE + myName.toKotlin() + "(" + myParams.toKotlin() + ")" + SPACE + COLON + SPACE + myType.toKotlin() + SPACE + - myBlock.toKotlin(); + return "fun" + SPACE + myName.toKotlin() + typeParametersToKotlin() + "(" + myParams.toKotlin() + ")" + SPACE + COLON + + SPACE + myType.toKotlin() + SPACE + myBlock.toKotlin(); } } diff --git a/test/org/jetbrains/jet/j2k/ast/FunctionTest.java b/test/org/jetbrains/jet/j2k/ast/FunctionTest.java index dd2297deb96..c1f1d9e4372 100644 --- a/test/org/jetbrains/jet/j2k/ast/FunctionTest.java +++ b/test/org/jetbrains/jet/j2k/ast/FunctionTest.java @@ -41,4 +41,25 @@ public class FunctionTest extends JetTestCaseBase { "fun isTrue() : Boolean { return true }" ); } + + public void testClassGenericParam() throws Exception { + Assert.assertEquals( + methodToSingleLineKotlin("T getT() {}"), + "fun getT() : T? { }" + ); + } + + public void testOwnGenericParam() throws Exception { + Assert.assertEquals( + methodToSingleLineKotlin(" void putU(U u) {}"), + "fun putU(u : U?) : Unit { }" + ); + } + + public void testOwnSeveralGenericParams() throws Exception { + Assert.assertEquals( + methodToSingleLineKotlin(" void putUVW(U u, V v, W w) {}"), + "fun putUVW(u : U?, v : V?, w : W?) : Unit { }" + ); + } } \ No newline at end of file