super statement improved

This commit is contained in:
Sergey Ignatov
2011-11-07 19:18:00 +04:00
parent 98c9fcf68f
commit 35a6c1973a
6 changed files with 33 additions and 8 deletions
@@ -6,15 +6,17 @@ import org.jetbrains.annotations.NotNull;
* @author ignatov * @author ignatov
*/ */
public class SuperExpression extends Expression { public class SuperExpression extends Expression {
private Type myType; private Identifier myIdentifier;
public SuperExpression(Type type) { public SuperExpression(Identifier identifier) {
myType = type; myIdentifier = identifier;
} }
@NotNull @NotNull
@Override @Override
public String toKotlin() { public String toKotlin() {
return "super" + "<" + myType.toKotlin() + ">"; if (myIdentifier.isEmpty())
return "super";
return "super" + AT + myIdentifier.toKotlin();
} }
} }
@@ -4,7 +4,6 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl; import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.Converter;
import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.*;
import java.util.List; import java.util.List;
@@ -240,7 +239,8 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
@Override @Override
public void visitSuperExpression(PsiSuperExpression expression) { public void visitSuperExpression(PsiSuperExpression expression) {
super.visitSuperExpression(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 @Override
@@ -4,6 +4,6 @@ fun call() : Unit {
} }
open class A : B { open class A : B {
override fun call() : Unit { override fun call() : Unit {
return super<B>.call() return super.call()
} }
} }
@@ -0,0 +1,11 @@
class Base {
void foo();
}
class A extends Base {
class C {
void test() {
A.super.foo();
}
}
}
@@ -0,0 +1,12 @@
namespace {
open class Base {
fun foo() : Unit
}
open class A : Base {
open class C {
fun test() : Unit {
super@A.foo()
}
}
}
}
@@ -1 +1 @@
super<Any>.call() super.call()