diff --git a/src/org/jetbrains/jet/j2k/ast/ThisExpression.java b/src/org/jetbrains/jet/j2k/ast/ThisExpression.java new file mode 100644 index 00000000000..69e426ff602 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/ThisExpression.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class ThisExpression extends Expression { + private Identifier myIdentifier; + + public ThisExpression(Identifier identifier) { + myIdentifier = identifier; + } + + @NotNull + @Override + public String toKotlin() { + if (myIdentifier.isEmpty()) + return "this"; + return "this" + AT + myIdentifier.toKotlin(); + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index a96722bfa97..ebdb7d80e3e 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -193,7 +193,7 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { myResult = new NewClassExpression( elementToElement(expression.getClassOrAnonymousClassReference()), elementToElement(expression.getArgumentList()), - expression.getAnonymousClass() != null? + expression.getAnonymousClass() != null ? anonymousClassToAnonymousClass(expression.getAnonymousClass()) : null ); @@ -239,13 +239,24 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { @Override public void visitSuperExpression(PsiSuperExpression expression) { super.visitSuperExpression(expression); + final PsiJavaCodeReferenceElement qualifier = expression.getQualifier(); myResult = new SuperExpression( - expression.getQualifier() != null ? new IdentifierImpl(expression.getQualifier().getQualifiedName()): Identifier.EMPTY_IDENTIFIER); + qualifier != null ? + new IdentifierImpl(qualifier.getQualifiedName()) : + Identifier.EMPTY_IDENTIFIER + ); } @Override public void visitThisExpression(PsiThisExpression expression) { super.visitThisExpression(expression); + final PsiJavaCodeReferenceElement qualifier = expression.getQualifier(); + myResult = new ThisExpression( + qualifier != null ? + new IdentifierImpl(qualifier.getQualifiedName()) : + Identifier.EMPTY_IDENTIFIER + ); + } @Override diff --git a/testData/ast/thisExpression/file/classAdotThisFoo.jav b/testData/ast/thisExpression/file/classAdotThisFoo.jav new file mode 100644 index 00000000000..6449695eb81 --- /dev/null +++ b/testData/ast/thisExpression/file/classAdotThisFoo.jav @@ -0,0 +1,11 @@ +class Base { + void foo() {} +} + +class A extends Base { + class C { + void test() { + A.this.foo(); + } + } +} \ No newline at end of file diff --git a/testData/ast/thisExpression/file/classAdotThisFoo.kt b/testData/ast/thisExpression/file/classAdotThisFoo.kt new file mode 100644 index 00000000000..939b443357a --- /dev/null +++ b/testData/ast/thisExpression/file/classAdotThisFoo.kt @@ -0,0 +1,13 @@ +namespace { +open class Base { +fun foo() : Unit { +} +} +open class A : Base { +open class C { +fun test() : Unit { +this@A.foo() +} +} +} +} \ No newline at end of file diff --git a/testData/ast/thisExpression/statement/thisStatement.jav b/testData/ast/thisExpression/statement/thisStatement.jav new file mode 100644 index 00000000000..4b2f79a6823 --- /dev/null +++ b/testData/ast/thisExpression/statement/thisStatement.jav @@ -0,0 +1 @@ +super.call(); \ No newline at end of file diff --git a/testData/ast/thisExpression/statement/thisStatement.kt b/testData/ast/thisExpression/statement/thisStatement.kt new file mode 100644 index 00000000000..a0ea37bcc63 --- /dev/null +++ b/testData/ast/thisExpression/statement/thisStatement.kt @@ -0,0 +1 @@ +super.call() \ No newline at end of file