first type parameters implementation for classes added
This commit is contained in:
@@ -38,17 +38,16 @@ public class Converter {
|
|||||||
|
|
||||||
private static Class classToClass(PsiClass psiClass) {
|
private static Class classToClass(PsiClass psiClass) {
|
||||||
final List<Function> methods = methodsToFunctionList(psiClass.getMethods(), true);
|
final List<Function> methods = methodsToFunctionList(psiClass.getMethods(), true);
|
||||||
|
|
||||||
final List<Class> innerClasses = classesToClassList(psiClass.getAllInnerClasses());
|
final List<Class> innerClasses = classesToClassList(psiClass.getAllInnerClasses());
|
||||||
|
|
||||||
final List<Field> fields = fieldsToFieldList(psiClass.getAllFields());
|
final List<Field> fields = fieldsToFieldList(psiClass.getAllFields());
|
||||||
|
final List<Element> typeParameters = elementsToElementList(psiClass.getTypeParameters());
|
||||||
|
|
||||||
final IdentifierImpl name = new IdentifierImpl(psiClass.getName());
|
final IdentifierImpl name = new IdentifierImpl(psiClass.getName());
|
||||||
if (psiClass.isInterface())
|
if (psiClass.isInterface())
|
||||||
return new Trait(name, innerClasses, methods, fields);
|
return new Trait(name, typeParameters, innerClasses, methods, fields);
|
||||||
if (psiClass.isEnum())
|
if (psiClass.isEnum())
|
||||||
return new Enum(name, innerClasses, methods, fields);
|
return new Enum(name, typeParameters, innerClasses, methods, fields);
|
||||||
return new Class(name, innerClasses, methods, fields);
|
return new Class(name, typeParameters, innerClasses, methods, fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Field> fieldsToFieldList(PsiField[] fields) {
|
private static List<Field> fieldsToFieldList(PsiField[] fields) {
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ import java.util.List;
|
|||||||
public class Class extends Node {
|
public class Class extends Node {
|
||||||
String TYPE = "class";
|
String TYPE = "class";
|
||||||
final Identifier myName;
|
final Identifier myName;
|
||||||
|
final List<Element> myTypeParameters;
|
||||||
final List<Class> myInnerClasses;
|
final List<Class> myInnerClasses;
|
||||||
final List<Function> myMethods;
|
final List<Function> myMethods;
|
||||||
final List<Field> myFields;
|
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;
|
myName = name;
|
||||||
|
myTypeParameters = typeParameters;
|
||||||
myInnerClasses = innerClasses;
|
myInnerClasses = innerClasses;
|
||||||
myMethods = methods;
|
myMethods = methods;
|
||||||
myFields = fields;
|
myFields = fields;
|
||||||
@@ -32,10 +34,14 @@ public class Class extends Node {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String typeParametersToKotlin() {
|
||||||
|
return myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String toKotlin() {
|
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(myFields, N) + N +
|
||||||
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
|
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
|
||||||
AstUtil.joinNodes(myInnerClasses, N) + N +
|
AstUtil.joinNodes(myInnerClasses, N) + N +
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import java.util.List;
|
|||||||
* @author ignatov
|
* @author ignatov
|
||||||
*/
|
*/
|
||||||
public class Enum extends Class {
|
public class Enum extends Class {
|
||||||
public Enum(Identifier name, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
public Enum(Identifier name, List<Element> typeParameters, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||||
super(name, innerClasses, methods, fields);
|
super(name, typeParameters, innerClasses, methods, fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -33,7 +33,7 @@ public class Enum extends Class {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String toKotlin() {
|
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(myFields, N) + N +
|
||||||
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
|
AstUtil.joinNodes(methodsExceptConstructors(), N) + N +
|
||||||
AstUtil.joinNodes(myInnerClasses, N) + N +
|
AstUtil.joinNodes(myInnerClasses, N) + N +
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import java.util.List;
|
|||||||
* @author ignatov
|
* @author ignatov
|
||||||
*/
|
*/
|
||||||
public class Trait extends Class {
|
public class Trait extends Class {
|
||||||
public Trait(Identifier name, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
public Trait(Identifier name, List<Element> typeParameters, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||||
super(name, innerClasses, methods, fields);
|
super(name, typeParameters, innerClasses, methods, fields);
|
||||||
TYPE = "trait";
|
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
|
myResult = new IdentifierImpl(reference.getQualifiedName()); // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitTypeParameter(PsiTypeParameter classParameter) {
|
||||||
|
super.visitTypeParameter(classParameter);
|
||||||
|
myResult = new TypeParameter(
|
||||||
|
new IdentifierImpl(classParameter.getName())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitParameterList(PsiParameterList list) {
|
public void visitParameterList(PsiParameterList list) {
|
||||||
super.visitParameterList(list);
|
super.visitParameterList(list);
|
||||||
@@ -51,4 +59,4 @@ public class ElementVisitor extends JavaElementVisitor implements Visitor {
|
|||||||
Converter.parametersToParameterList(list.getParameters())
|
Converter.parametersToParameterList(list.getParameters())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -62,4 +62,11 @@ public class ClassTest extends JetTestCaseBase {
|
|||||||
"}\n" +
|
"}\n" +
|
||||||
"}");
|
"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testGenericClass() throws Exception {
|
||||||
|
Assert.assertEquals(
|
||||||
|
classToSingleLineKotlin("final class Entry<K, V> {}"),
|
||||||
|
"class Entry<K?, V?> { }"
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user