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.ast.*;
import java.util.List;
import static org.jetbrains.jet.j2k.Converter.*;
/**
@@ -43,17 +45,24 @@ public class ElementVisitor extends JavaElementVisitor {
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
super.visitReferenceElement(reference);
if (!reference.isQualified())
myResult = new IdentifierImpl(reference.getReferenceName());
else {
String result = reference.getReferenceName();
final List<Type> types = typesToTypeList(reference.getTypeParameters());
if (!reference.isQualified()) {
myResult = new ReferenceElement(
new IdentifierImpl(reference.getReferenceName()),
types
);
} else {
String result = new IdentifierImpl(reference.getReferenceName()).toKotlin();
PsiElement qualifier = reference.getQualifier();
while (qualifier != null){
while (qualifier != null) {
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();
}
myResult = new IdentifierImpl(result);
myResult = new ReferenceElement(
new IdentifierImpl(result),
types
);
}
}
@@ -1,6 +1,7 @@
package org.jetbrains.jet.j2k.visitors;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PsiClassReferenceType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.ast.*;
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 fun main() : Unit {
var members : List<Member?>? = LinkedList()
var members : List<Member?>? = LinkedList<Member?>()
members?.add(Member())
}
}