From 5440a5fab3d6f8e015fa65111ebbca5c30e24fa1 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Thu, 3 Nov 2011 17:37:12 +0400 Subject: [PATCH] instanceof supported, `is` operator added --- src/org/jetbrains/jet/j2k/ast/IsOperator.java | 22 ++++++++++++++++++ .../jetbrains/jet/j2k/ast/TypeElement.java | 20 ++++++++++++++++ .../jet/j2k/visitors/ElementVisitor.java | 6 +++++ .../jet/j2k/visitors/ExpressionVisitor.java | 3 +++ .../jetbrains/jet/j2k/ast/IsOperatorTest.java | 23 +++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 src/org/jetbrains/jet/j2k/ast/IsOperator.java create mode 100644 src/org/jetbrains/jet/j2k/ast/TypeElement.java create mode 100644 test/org/jetbrains/jet/j2k/ast/IsOperatorTest.java diff --git a/src/org/jetbrains/jet/j2k/ast/IsOperator.java b/src/org/jetbrains/jet/j2k/ast/IsOperator.java new file mode 100644 index 00000000000..530cca26c1c --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/IsOperator.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class IsOperator extends Expression { + private Expression myExpression; + private Element myTypeElement; + + public IsOperator(Expression expression, Element typeElement) { + myExpression = expression; + myTypeElement = typeElement; + } + + @NotNull + @Override + public String toKotlin() { + return "(" + myExpression.toKotlin() + SPACE + "is" + SPACE + myTypeElement.toKotlin() + ")"; + } +} diff --git a/src/org/jetbrains/jet/j2k/ast/TypeElement.java b/src/org/jetbrains/jet/j2k/ast/TypeElement.java new file mode 100644 index 00000000000..6e3cf2617ca --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/TypeElement.java @@ -0,0 +1,20 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class TypeElement extends Element { + private Type myType; + + public TypeElement(Type type) { + myType = type; + } + + @NotNull + @Override + public String toKotlin() { + return myType.toKotlin(); + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java index 1a25cc76b5d..0357cb802d1 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java @@ -46,6 +46,12 @@ public class ElementVisitor extends JavaElementVisitor implements Visitor { myResult = new IdentifierImpl(reference.getQualifiedName()); // TODO } + @Override + public void visitTypeElement(PsiTypeElement type) { + super.visitTypeElement(type); + myResult = new TypeElement(typeToType(type.getType())); + } + @Override public void visitTypeParameter(PsiTypeParameter classParameter) { super.visitTypeParameter(classParameter); diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index c34294693ab..bd12a250e72 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -140,6 +140,9 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { @Override public void visitInstanceOfExpression(PsiInstanceOfExpression expression) { super.visitInstanceOfExpression(expression); + myResult = new IsOperator( + expressionToExpression(expression.getOperand()), + elementToElement(expression.getCheckType())); } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/IsOperatorTest.java b/test/org/jetbrains/jet/j2k/ast/IsOperatorTest.java new file mode 100644 index 00000000000..76e7ce2b0fc --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/IsOperatorTest.java @@ -0,0 +1,23 @@ +package org.jetbrains.jet.j2k.ast; + +import junit.framework.Assert; +import org.jetbrains.jet.j2k.JetTestCaseBase; + +/** + * @author ignatov + */ +public class IsOperatorTest extends JetTestCaseBase { + public void testSimpleReference() throws Exception { + Assert.assertEquals( + expressionToKotlin("a instanceof String"), + "(a is String?)" + ); + } + + public void testComplicatedExpression() throws Exception { + Assert.assertEquals( + expressionToKotlin("c.getType().getName() instanceof String"), + "(c.getType().getName() is String?)" + ); + } +}