support generic params in constructor invocation

This commit is contained in:
Sergey Ignatov
2011-11-17 16:35:01 +04:00
parent c5c3e92b4e
commit aa976315d9
6 changed files with 59 additions and 8 deletions
@@ -0,0 +1,26 @@
package org.jetbrains.jet.j2k.ast;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.util.AstUtil;
import java.util.List;
/**
* @author ignatov
*/
public class ReferenceElement extends Element {
private Identifier myReference;
private List<Type> myTypes;
public ReferenceElement(@NotNull Identifier reference, @NotNull List<Type> types) {
myReference = reference;
myTypes = types;
}
@NotNull
@Override
public String toKotlin() {
String typesIfNeeded = myTypes.size() > 0 ? "<" + AstUtil.joinNodes(myTypes, COMMA_WITH_SPACE) + ">" : EMPTY;
return myReference.toKotlin() + typesIfNeeded;
}
}
@@ -5,6 +5,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.Converter;
import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.*;
import java.util.List;
import static org.jetbrains.jet.j2k.Converter.*; import static org.jetbrains.jet.j2k.Converter.*;
/** /**
@@ -43,17 +45,24 @@ public class ElementVisitor extends JavaElementVisitor {
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) { public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
super.visitReferenceElement(reference); super.visitReferenceElement(reference);
if (!reference.isQualified()) final List<Type> types = typesToTypeList(reference.getTypeParameters());
myResult = new IdentifierImpl(reference.getReferenceName()); if (!reference.isQualified()) {
else { myResult = new ReferenceElement(
String result = reference.getReferenceName(); new IdentifierImpl(reference.getReferenceName()),
types
);
} else {
String result = new IdentifierImpl(reference.getReferenceName()).toKotlin();
PsiElement qualifier = reference.getQualifier(); PsiElement qualifier = reference.getQualifier();
while (qualifier != null){ while (qualifier != null) {
final PsiJavaCodeReferenceElement p = (PsiJavaCodeReferenceElement) qualifier; final PsiJavaCodeReferenceElement p = (PsiJavaCodeReferenceElement) qualifier;
result = p.getReferenceName() + "." + result; // TODO: maybe need to replace by safe call? result = new IdentifierImpl(p.getReferenceName()).toKotlin() + "." + result; // TODO: maybe need to replace by safe call?
qualifier = p.getQualifier(); qualifier = p.getQualifier();
} }
myResult = new IdentifierImpl(result); myResult = new ReferenceElement(
new IdentifierImpl(result),
types
);
} }
} }
@@ -1,6 +1,7 @@
package org.jetbrains.jet.j2k.visitors; package org.jetbrains.jet.j2k.visitors;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.psi.impl.source.PsiClassReferenceType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.*;
import org.jetbrains.jet.j2k.util.AstUtil; import org.jetbrains.jet.j2k.util.AstUtil;
@@ -0,0 +1,8 @@
import java.util.List;
import java.util.LinkedList;
class User {
void main() {
List<String> list = new LinkedList<String>();
}
}
@@ -0,0 +1,7 @@
import java.util.List
import java.util.LinkedList
open class User() {
open fun main() : Unit {
var list : List<String?>? = LinkedList<String?>()
}
}
@@ -5,7 +5,7 @@ open class Member() {
} }
open class User() { open class User() {
open fun main() : Unit { open fun main() : Unit {
var members : List<Member?>? = LinkedList() var members : List<Member?>? = LinkedList<Member?>()
members?.add(Member()) members?.add(Member())
} }
} }