From fd7fde10580bdfb0ef22a359a7304b8fd38d1c10 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 7 Nov 2011 19:23:45 +0400 Subject: [PATCH] this statement added --- .../jetbrains/jet/j2k/ast/ThisExpression.java | 22 +++++++++++++++++++ .../jet/j2k/visitors/ExpressionVisitor.java | 15 +++++++++++-- .../thisExpression/file/classAdotThisFoo.jav | 11 ++++++++++ .../thisExpression/file/classAdotThisFoo.kt | 13 +++++++++++ .../statement/thisStatement.jav | 1 + .../thisExpression/statement/thisStatement.kt | 1 + 6 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/org/jetbrains/jet/j2k/ast/ThisExpression.java create mode 100644 testData/ast/thisExpression/file/classAdotThisFoo.jav create mode 100644 testData/ast/thisExpression/file/classAdotThisFoo.kt create mode 100644 testData/ast/thisExpression/statement/thisStatement.jav create mode 100644 testData/ast/thisExpression/statement/thisStatement.kt 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