first type parameters implementation for classes added

This commit is contained in:
Sergey Ignatov
2011-11-01 14:52:25 +04:00
parent 15eafa6f9c
commit fa2483ccfb
7 changed files with 53 additions and 13 deletions
+4 -5
View File
@@ -38,17 +38,16 @@ public class Converter {
private static Class classToClass(PsiClass psiClass) {
final List<Function> methods = methodsToFunctionList(psiClass.getMethods(), true);
final List<Class> innerClasses = classesToClassList(psiClass.getAllInnerClasses());
final List<Field> fields = fieldsToFieldList(psiClass.getAllFields());
final List<Element> typeParameters = elementsToElementList(psiClass.getTypeParameters());
final IdentifierImpl name = new IdentifierImpl(psiClass.getName());
if (psiClass.isInterface())
return new Trait(name, innerClasses, methods, fields);
return new Trait(name, typeParameters, innerClasses, methods, fields);
if (psiClass.isEnum())
return new Enum(name, innerClasses, methods, fields);
return new Class(name, innerClasses, methods, fields);
return new Enum(name, typeParameters, innerClasses, methods, fields);
return new Class(name, typeParameters, innerClasses, methods, fields);
}
private static List<Field> fieldsToFieldList(PsiField[] fields) {
+8 -2
View File
@@ -12,12 +12,14 @@ import java.util.List;
public class Class extends Node {
String TYPE = "class";
final Identifier myName;
final List<Element> myTypeParameters;
final List<Class> myInnerClasses;
final List<Function> myMethods;
final List<Field> myFields;
public Class(Identifier name, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
public Class(Identifier name, List<Element> typeParameters, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
myName = name;
myTypeParameters = typeParameters;
myInnerClasses = innerClasses;
myMethods = methods;
myFields = fields;
@@ -32,10 +34,14 @@ public class Class extends Node {
return result;
}
String typeParametersToKotlin() {
return myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY;
}
@NotNull
@Override
public String toKotlin() {
return TYPE + SPACE + myName.toKotlin() + SPACE + "{" + N +
return TYPE + SPACE + myName.toKotlin() + typeParametersToKotlin() + SPACE + "{" + N +
AstUtil.joinNodes(myFields, N) + N +
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
AstUtil.joinNodes(myInnerClasses, N) + N +
+3 -3
View File
@@ -10,8 +10,8 @@ import java.util.List;
* @author ignatov
*/
public class Enum extends Class {
public Enum(Identifier name, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
super(name, innerClasses, methods, fields);
public Enum(Identifier name, List<Element> typeParameters, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
super(name, typeParameters, innerClasses, methods, fields);
}
@Nullable
@@ -33,7 +33,7 @@ public class Enum extends Class {
@NotNull
@Override
public String toKotlin() {
return "enum" + SPACE + myName.toKotlin() + primaryConstructorToKotlin() + SPACE + "{" + N +
return "enum" + SPACE + myName.toKotlin() + typeParametersToKotlin() + primaryConstructorToKotlin() + SPACE + "{" + N +
AstUtil.joinNodes(myFields, N) + N +
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
AstUtil.joinNodes(myInnerClasses, N) + N +
+2 -2
View File
@@ -6,8 +6,8 @@ import java.util.List;
* @author ignatov
*/
public class Trait extends Class {
public Trait(Identifier name, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
super(name, innerClasses, methods, fields);
public Trait(Identifier name, List<Element> typeParameters, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
super(name, typeParameters, innerClasses, methods, fields);
TYPE = "trait";
}
}
@@ -0,0 +1,20 @@
package org.jetbrains.jet.j2k.ast;
import org.jetbrains.annotations.NotNull;
/**
* @author ignatov
*/
public class TypeParameter extends Element {
private Identifier myName;
public TypeParameter(Identifier name) {
myName = name;
}
@NotNull
@Override
public String toKotlin() {
return myName.toKotlin() + QUESTION;
}
}
@@ -44,6 +44,14 @@ public class ElementVisitor extends JavaElementVisitor implements Visitor {
myResult = new IdentifierImpl(reference.getQualifiedName()); // TODO
}
@Override
public void visitTypeParameter(PsiTypeParameter classParameter) {
super.visitTypeParameter(classParameter);
myResult = new TypeParameter(
new IdentifierImpl(classParameter.getName())
);
}
@Override
public void visitParameterList(PsiParameterList list) {
super.visitParameterList(list);
@@ -51,4 +59,4 @@ public class ElementVisitor extends JavaElementVisitor implements Visitor {
Converter.parametersToParameterList(list.getParameters())
);
}
}
}
@@ -62,4 +62,11 @@ public class ClassTest extends JetTestCaseBase {
"}\n" +
"}");
}
public void testGenericClass() throws Exception {
Assert.assertEquals(
classToSingleLineKotlin("final class Entry<K, V> {}"),
"class Entry<K?, V?> { }"
);
}
}