class initializers supported
This commit is contained in:
@@ -42,7 +42,8 @@ public class Converter {
|
||||
return new AnonymousClass(
|
||||
classesToClassList(anonymousClass.getAllInnerClasses()),
|
||||
methodsToFunctionList(anonymousClass.getMethods()),
|
||||
fieldsToFieldList(anonymousClass.getAllFields())
|
||||
fieldsToFieldList(anonymousClass.getAllFields()),
|
||||
initializersToInitializerList(anonymousClass.getInitializers())
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,6 +84,7 @@ public class Converter {
|
||||
final List<Class> innerClasses = classesToClassList(psiClass.getAllInnerClasses());
|
||||
final List<Function> methods = methodsToFunctionList(psiClass.getMethods());
|
||||
final List<Field> fields = fieldsToFieldList(psiClass.getFields());
|
||||
final List<Initializer> anonymousInitializers = initializersToInitializerList(psiClass.getInitializers());
|
||||
final List<Element> typeParameters = elementsToElementList(psiClass.getTypeParameters());
|
||||
final List<Type> implementsTypes = typesToNotNullableTypeList(psiClass.getImplementsListTypes());
|
||||
final List<Type> extendsTypes = typesToNotNullableTypeList(psiClass.getExtendsListTypes());
|
||||
@@ -161,11 +163,26 @@ public class Converter {
|
||||
}
|
||||
|
||||
if (psiClass.isInterface())
|
||||
return new Trait(name, modifiers, typeParameters, extendsTypes, Collections.<Expression>emptyList(), implementsTypes, innerClasses, methods, fields);
|
||||
return new Trait(name, modifiers, typeParameters, extendsTypes, Collections.<Expression>emptyList(), implementsTypes, innerClasses, methods, fields, anonymousInitializers);
|
||||
if (psiClass.isEnum())
|
||||
return new Enum(name, modifiers, typeParameters, Collections.<Type>emptyList(), Collections.<Expression>emptyList(), implementsTypes,
|
||||
innerClasses, methods, fieldsToFieldListForEnums(psiClass.getAllFields()));
|
||||
return new Class(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields);
|
||||
innerClasses, methods, fieldsToFieldListForEnums(psiClass.getAllFields()), anonymousInitializers);
|
||||
return new Class(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields, anonymousInitializers);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<Initializer> initializersToInitializerList(PsiClassInitializer[] initializers) {
|
||||
List<Initializer> result = new LinkedList<Initializer>();
|
||||
for (PsiClassInitializer i : initializers) result.add(initializerToInitializer(i));
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Initializer initializerToInitializer(PsiClassInitializer i) {
|
||||
return new Initializer(
|
||||
blockToBlock(i.getBody(), true),
|
||||
modifiersListToModifiersSet(i.getModifierList())
|
||||
);
|
||||
}
|
||||
|
||||
private static String getDefaultInitializer(Field f) {
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
* @author ignatov
|
||||
*/
|
||||
public class AnonymousClass extends Class {
|
||||
public AnonymousClass(List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||
public AnonymousClass(List<Class> innerClasses, List<Function> methods, List<Field> fields, List<Initializer> initializers) {
|
||||
super(new IdentifierImpl("anonClass"),
|
||||
Collections.<String>emptySet(),
|
||||
Collections.<Element>emptyList(),
|
||||
@@ -18,7 +18,8 @@ public class AnonymousClass extends Class {
|
||||
Collections.<Type>emptyList(),
|
||||
innerClasses,
|
||||
methods,
|
||||
fields);
|
||||
fields,
|
||||
initializers);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -18,6 +18,7 @@ public class Class extends Member {
|
||||
String TYPE = "class";
|
||||
final Identifier myName;
|
||||
private final List<Expression> myBaseClassParams;
|
||||
private List<Initializer> myInitializers;
|
||||
private final List<Element> myTypeParameters;
|
||||
private final List<Type> myExtendsTypes;
|
||||
private final List<Type> myImplementsTypes;
|
||||
@@ -26,7 +27,7 @@ public class Class extends Member {
|
||||
final List<Field> myFields;
|
||||
|
||||
public Class(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes,
|
||||
List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||
List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields, List<Initializer> initializers) {
|
||||
myName = name;
|
||||
myBaseClassParams = baseClassParams;
|
||||
myModifiers = modifiers;
|
||||
@@ -36,6 +37,7 @@ public class Class extends Member {
|
||||
myInnerClasses = innerClasses;
|
||||
myMethods = methods;
|
||||
myFields = fields;
|
||||
myInitializers = initializers;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -163,6 +165,7 @@ public class Class extends Member {
|
||||
String bodyToKotlin() {
|
||||
return SPACE + "{" + N +
|
||||
AstUtil.joinNodes(getNonStatic(myFields), N) + N +
|
||||
AstUtil.joinNodes(getNonStatic(myInitializers), N) + N +
|
||||
classObjectToKotlin() + N +
|
||||
AstUtil.joinNodes(getNonStatic(methodsExceptConstructors()), N) + N +
|
||||
AstUtil.joinNodes(getNonStatic(myInnerClasses), N) + N +
|
||||
@@ -190,10 +193,12 @@ public class Class extends Member {
|
||||
final List<Member> staticMethods = new LinkedList<Member>(secondaryConstructorsAsStaticInitFunction());
|
||||
staticMethods.addAll(getStatic(methodsExceptConstructors()));
|
||||
final List<Member> staticFields = getStatic(myFields);
|
||||
final List<Member> staticInitializers = getStatic(myInitializers);
|
||||
final List<Member> staticInnerClasses = getStatic(myInnerClasses);
|
||||
if (staticFields.size() + staticMethods.size() + staticInnerClasses.size() > 0) {
|
||||
if (staticFields.size() + staticMethods.size() + staticInnerClasses.size() + staticInitializers.size() > 0) {
|
||||
return "class" + SPACE + "object" + SPACE + "{" + N +
|
||||
AstUtil.joinNodes(staticFields, N) + N +
|
||||
AstUtil.joinNodes(staticInitializers, N) + N +
|
||||
AstUtil.joinNodes(staticMethods, N) + N +
|
||||
AstUtil.joinNodes(staticInnerClasses, N) + N +
|
||||
"}";
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.jetbrains.jet.j2k.ast;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.j2k.util.AstUtil;
|
||||
|
||||
import java.util.List;
|
||||
@@ -11,8 +10,8 @@ import java.util.Set;
|
||||
* @author ignatov
|
||||
*/
|
||||
public class Enum extends Class {
|
||||
public Enum(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes, List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||
super(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields);
|
||||
public Enum(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes, List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields, List<Initializer> initializers) {
|
||||
super(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields, initializers);
|
||||
}
|
||||
|
||||
String primaryConstructorSignatureToKotlin() {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.jetbrains.jet.j2k.ast;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author ignatov
|
||||
*/
|
||||
public class Initializer extends Member {
|
||||
private Block myBlock;
|
||||
|
||||
public Initializer(Block block, Set<String> modifiers) {
|
||||
myBlock = block;
|
||||
myModifiers = modifiers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String toKotlin() {
|
||||
return myBlock.toKotlin();
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,8 @@ import java.util.Set;
|
||||
* @author ignatov
|
||||
*/
|
||||
public class Trait extends Class {
|
||||
public Trait(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes, List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields) {
|
||||
super(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields);
|
||||
public Trait(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes, List<Expression> baseClassParams, List<Type> implementsTypes, List<Class> innerClasses, List<Function> methods, List<Field> fields, List<Initializer> initializers) {
|
||||
super(name, modifiers, typeParameters, extendsTypes, baseClassParams, implementsTypes, innerClasses, methods, fields, initializers);
|
||||
TYPE = "trait";
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class Test {
|
||||
String str;
|
||||
{
|
||||
str = "Ola";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
open class Test() {
|
||||
var str : String?
|
||||
{
|
||||
str = "Ola"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
class Test {
|
||||
String str;
|
||||
static {
|
||||
str = "Ola";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
open class Test() {
|
||||
var str : String?
|
||||
class object {
|
||||
{
|
||||
str = "Ola"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user