diff --git a/src/org/jetbrains/jet/j2k/ast/SuperExpression.java b/src/org/jetbrains/jet/j2k/ast/SuperExpression.java index a52ce00c448..556484f6f66 100644 --- a/src/org/jetbrains/jet/j2k/ast/SuperExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/SuperExpression.java @@ -6,15 +6,17 @@ import org.jetbrains.annotations.NotNull; * @author ignatov */ public class SuperExpression extends Expression { - private Type myType; + private Identifier myIdentifier; - public SuperExpression(Type type) { - myType = type; + public SuperExpression(Identifier identifier) { + myIdentifier = identifier; } @NotNull @Override public String toKotlin() { - return "super" + "<" + myType.toKotlin() + ">"; + if (myIdentifier.isEmpty()) + return "super"; + return "super" + AT + myIdentifier.toKotlin(); } } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 9683a6544e7..a96722bfa97 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -4,7 +4,6 @@ import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.ast.*; import java.util.List; @@ -240,7 +239,8 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { @Override public void visitSuperExpression(PsiSuperExpression expression) { super.visitSuperExpression(expression); - myResult = new SuperExpression(typeToNotNullableType(expression.getType())); + myResult = new SuperExpression( + expression.getQualifier() != null ? new IdentifierImpl(expression.getQualifier().getQualifiedName()): Identifier.EMPTY_IDENTIFIER); } @Override diff --git a/testData/ast/superExpression/class/classAextendsB.kt b/testData/ast/superExpression/class/classAextendsB.kt index 4d9518ab15b..b917dff44e3 100644 --- a/testData/ast/superExpression/class/classAextendsB.kt +++ b/testData/ast/superExpression/class/classAextendsB.kt @@ -4,6 +4,6 @@ fun call() : Unit { } open class A : B { override fun call() : Unit { -return super.call() +return super.call() } } \ No newline at end of file diff --git a/testData/ast/superExpression/file/classAdotSuperFoo.jav b/testData/ast/superExpression/file/classAdotSuperFoo.jav new file mode 100644 index 00000000000..f53906b2c67 --- /dev/null +++ b/testData/ast/superExpression/file/classAdotSuperFoo.jav @@ -0,0 +1,11 @@ +class Base { + void foo(); +} + +class A extends Base { + class C { + void test() { + A.super.foo(); + } + } +} \ No newline at end of file diff --git a/testData/ast/superExpression/file/classAdotSuperFoo.kt b/testData/ast/superExpression/file/classAdotSuperFoo.kt new file mode 100644 index 00000000000..e2c1d9213db --- /dev/null +++ b/testData/ast/superExpression/file/classAdotSuperFoo.kt @@ -0,0 +1,12 @@ +namespace { +open class Base { +fun foo() : Unit +} +open class A : Base { +open class C { +fun test() : Unit { +super@A.foo() +} +} +} +} \ No newline at end of file diff --git a/testData/ast/superExpression/statement/superStatement.kt b/testData/ast/superExpression/statement/superStatement.kt index 2ee17f5e923..a0ea37bcc63 100644 --- a/testData/ast/superExpression/statement/superStatement.kt +++ b/testData/ast/superExpression/statement/superStatement.kt @@ -1 +1 @@ -super.call() \ No newline at end of file +super.call() \ No newline at end of file