diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 5b1050c5084..c94a5804f28 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -132,7 +132,7 @@ public class Converter { final StatementVisitor statementVisitor = new StatementVisitor(); s.accept(statementVisitor); System.out.println(s.getClass()); - return statementVisitor.getStatement(); + return statementVisitor.getResult(); } @NotNull @@ -172,7 +172,7 @@ public class Converter { } @NotNull - public static Type typeToType(PsiType type) { + public static Type typeToType(@Nullable PsiType type) { if (type == null) return new EmptyType(); // TODO TypeVisitor typeVisitor = new TypeVisitor(); diff --git a/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java b/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java new file mode 100644 index 00000000000..ddd82b0dad4 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class TypeCastExpression extends Expression { + private final Type myType; + private final Expression myExpression; + + public TypeCastExpression(Type type, Expression expression) { + myType = type; + myExpression = expression; + } + + @NotNull + @Override + public String toKotlin() { + return "(" + myExpression.toKotlin() + SPACE + "as" + SPACE + myType.toKotlin() + ")"; + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java index d045c6741f2..25feabfa00b 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java @@ -16,6 +16,12 @@ import static org.jetbrains.jet.j2k.Converter.*; public class ElementVisitor extends JavaElementVisitor implements Visitor { private Element myResult = new EmptyElement(); + @NotNull + @Override + public Element getResult() { + return myResult; + } + @Override public void visitLocalVariable(PsiLocalVariable variable) { super.visitLocalVariable(variable); @@ -42,9 +48,4 @@ public class ElementVisitor extends JavaElementVisitor implements Visitor { Converter.parametersToParameterList(list.getParameters()) ); } - - @NotNull - public Element getResult() { - return myResult; - } } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 2abf0341f48..241dded360a 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -216,6 +216,14 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { @Override public void visitTypeCastExpression(PsiTypeCastExpression expression) { super.visitTypeCastExpression(expression); + + final PsiTypeElement castType = expression.getCastType(); + if (castType != null) { + myResult = new TypeCastExpression( + typeToType(castType.getType()), + expressionToExpression(expression.getOperand()) + ); + } } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/TypeCastExpressionTest.java b/test/org/jetbrains/jet/j2k/ast/TypeCastExpressionTest.java new file mode 100644 index 00000000000..0d89429f02e --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/TypeCastExpressionTest.java @@ -0,0 +1,59 @@ +package org.jetbrains.jet.j2k.ast; + +import junit.framework.Assert; +import org.jetbrains.jet.j2k.JetTestCaseBase; + +/** + * @author ignatov + */ +public class TypeCastExpressionTest extends JetTestCaseBase { + public void testStringCast() throws Exception { + Assert.assertEquals( + expressionToKotlin("(String)t"), + "(t as String?)" + ); + } + + public void testIntCast() throws Exception { + Assert.assertEquals( + expressionToKotlin("(int)t"), + "(t as Int)" + ); + } + + public void testFooCast() throws Exception { + Assert.assertEquals( + expressionToKotlin("(Foo)t"), + "(t as Foo?)" + ); + } + +// TODO: add support for generics and uncomment +// public void testSimpleGenericCast() throws Exception { +// Assert.assertEquals( +// expressionToKotlin("(List)list"), +// "(list as List)" +// ); +// } +// +// public void testExtendsWildcardCast() throws Exception { +// Assert.assertEquals( +// expressionToKotlin("(List)list"), +// "(list as List)" +// ); +// } +// +// public void testSuperWildcardCast() throws Exception { +// Assert.assertEquals( +// expressionToKotlin("(List)list"), +// "(list as List)" +// ); +// } +// +// public void testWildcardCast() throws Exception { +// Assert.assertEquals( +// expressionToKotlin("(List)list"), +// "(list as List<*>)" +// ); +// } +} \ No newline at end of file