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?)" + ); + } +}