KT-1016 Add initializers for fields more correctly

This commit is contained in:
Sergey Ignatov
2012-01-16 15:05:31 +04:00
parent d9b7435559
commit 3fa6882c8c
21 changed files with 98 additions and 73 deletions
+8 -6
View File
@@ -12,6 +12,7 @@ import org.jetbrains.jet.j2k.visitors.*;
import java.util.*;
import static org.jetbrains.jet.j2k.ConverterUtil.countWritingAccesses;
import static org.jetbrains.jet.j2k.ConverterUtil.createMainFunction;
import static org.jetbrains.jet.j2k.visitors.TypeVisitor.*;
@@ -99,7 +100,7 @@ public class Converter {
List<Member> members = new LinkedList<Member>();
for (PsiElement e : psiClass.getChildren()) {
if (e instanceof PsiMethod) members.add(methodToFunction((PsiMethod) e, true));
else if (e instanceof PsiField) members.add(fieldToField((PsiField) e));
else if (e instanceof PsiField) members.add(fieldToField((PsiField) e, psiClass));
else if (e instanceof PsiClass) members.add(classToClass((PsiClass) e));
else if (e instanceof PsiClassInitializer) members.add(initializerToInitializer((PsiClassInitializer) e));
else if (e instanceof PsiMember) System.out.println(e.getClass() + " " + e.getText());
@@ -147,7 +148,7 @@ public class Converter {
@NotNull
private static Class classToClass(@NotNull PsiClass psiClass) {
final Set<String> modifiers = modifiersListToModifiersSet(psiClass.getModifierList());
final List<Field> fields = fieldsToFieldList(psiClass.getFields());
final List<Field> fields = fieldsToFieldList(psiClass.getFields(), psiClass);
final List<Element> typeParameters = elementsToElementList(psiClass.getTypeParameters());
final List<Type> implementsTypes = typesToNotNullableTypeList(psiClass.getImplementsListTypes());
final List<Type> extendsTypes = typesToNotNullableTypeList(psiClass.getExtendsListTypes());
@@ -260,14 +261,14 @@ public class Converter {
}
@NotNull
private static List<Field> fieldsToFieldList(@NotNull PsiField[] fields) {
private static List<Field> fieldsToFieldList(@NotNull PsiField[] fields, PsiClass psiClass) {
List<Field> result = new LinkedList<Field>();
for (PsiField f : fields) result.add(fieldToField(f));
for (PsiField f : fields) result.add(fieldToField(f, psiClass));
return result;
}
@NotNull
private static Field fieldToField(@NotNull PsiField field) {
private static Field fieldToField(@NotNull PsiField field, PsiClass psiClass) {
Set<String> modifiers = modifiersListToModifiersSet(field.getModifierList());
if (field instanceof PsiEnumConstant) // TODO: remove instanceof
return new EnumConstant(
@@ -280,7 +281,8 @@ public class Converter {
new IdentifierImpl(field.getName()), // TODO
modifiers,
typeToType(field.getType()),
createSureCallOnlyForChain(field.getInitializer(), field.getType()) // TODO: add modifiers
createSureCallOnlyForChain(field.getInitializer(), field.getType()), // TODO: add modifiers
countWritingAccesses(field, psiClass)
);
}
@@ -9,7 +9,7 @@ import java.util.Set;
*/
public class EnumConstant extends Field {
public EnumConstant(Identifier identifier, Set<String> modifiers, @NotNull Type type, Element params) {
super(identifier, modifiers, type.convertedToNotNull(), params);
super(identifier, modifiers, type.convertedToNotNull(), params, 0);
}
@NotNull
+11 -10
View File
@@ -14,11 +14,13 @@ import static org.jetbrains.jet.j2k.Converter.getDefaultInitializer;
*/
public class Field extends Member {
final Identifier myIdentifier;
private final int myWritingAccesses;
final Type myType;
final Element myInitializer;
public Field(Identifier identifier, Set<String> modifiers, Type type, Element initializer) {
public Field(Identifier identifier, Set<String> modifiers, Type type, Element initializer, int writingAccesses) {
myIdentifier = identifier;
myWritingAccesses = writingAccesses;
myModifiers = modifiers;
myType = type;
myInitializer = initializer;
@@ -45,7 +47,7 @@ public class Field extends Member {
modifierList.add(accessModifier());
modifierList.add(myModifiers.contains(Modifier.FINAL) ? "val" : "var");
modifierList.add(isVal() ? "val" : "var");
if (modifierList.size() > 0)
return AstUtil.join(modifierList, SPACE) + SPACE;
@@ -53,24 +55,23 @@ public class Field extends Member {
return EMPTY;
}
public boolean isVal() {
return myModifiers.contains(Modifier.FINAL);
}
@Override
public boolean isStatic() {
return myModifiers.contains(Modifier.STATIC);
}
public boolean isFinal() {
return myModifiers.contains(Modifier.FINAL);
}
@NotNull
@Override
public String toKotlin() {
String modifier = modifiersToKotlin();
final String declaration = modifiersToKotlin() + myIdentifier.toKotlin() + SPACE + COLON + SPACE + myType.toKotlin();
if (myInitializer.isEmpty())
return modifier + myIdentifier.toKotlin() + SPACE + COLON + SPACE + myType.toKotlin() + SPACE + EQUAL + SPACE + getDefaultInitializer(this);
return declaration + (isVal() && !isStatic() && myWritingAccesses == 1 ? EMPTY : SPACE + EQUAL + SPACE + getDefaultInitializer(this));
return modifier + myIdentifier.toKotlin() + SPACE + COLON + SPACE + myType.toKotlin() + SPACE +
EQUAL + SPACE + myInitializer.toKotlin();
return declaration + SPACE + EQUAL + SPACE + myInitializer.toKotlin();
}
}
@@ -1,8 +1,5 @@
package test
public open class Test(str : String) {
{
myStr = str
}
var myStr : String? = "String2"
open public fun sout(str : String) : Unit {
System.out?.println(str)
@@ -17,4 +14,7 @@ sout(test)
sout(dummy(test))
Test(test)
}
{
myStr = str
}
}
@@ -1,12 +1,12 @@
open class C(arg1 : Int) {
val myArg1 : Int
var myArg2 : Int = 0
var myArg3 : Int = 0
{
myArg1 = arg1
myArg2 = 0
myArg3 = 0
}
val myArg1 : Int = 0
var myArg2 : Int = 0
var myArg3 : Int = 0
class object {
open fun init(arg1 : Int, arg2 : Int, arg3 : Int) : C {
val __ = C(arg1)
@@ -1,13 +1,7 @@
package org.test.customer
open class Customer(first : String?, last : String?) {
{
doSmthBefore()
_firstName = first
_lastName = last
doSmthAfter()
}
public val _firstName : String? = null
public val _lastName : String? = null
public val _firstName : String?
public val _lastName : String?
open public fun getFirstName() : String? {
return _firstName
}
@@ -18,6 +12,12 @@ open private fun doSmthBefore() : Unit {
}
open private fun doSmthAfter() : Unit {
}
{
doSmthBefore()
_firstName = first
_lastName = last
doSmthAfter()
}
}
open class CustomerBuilder() {
public var _firstName : String? = "Homer"
@@ -1,14 +1,14 @@
public open class Identifier<T>(_myName : T?, _myHasDollar : Boolean) {
{
myName = _myName
myHasDollar = _myHasDollar
}
private val myName : T? = null
private var myHasDollar : Boolean = false
private var myNullable : Boolean = true
open public fun getName() : T? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
open public fun init<T>(name : T?) : Identifier<T> {
val __ = Identifier(name, false)
+4 -4
View File
@@ -1,14 +1,14 @@
public open class Identifier(_myName : String?, _myHasDollar : Boolean) {
{
myName = _myName
myHasDollar = _myHasDollar
}
private val myName : String? = null
private var myHasDollar : Boolean = false
private var myNullable : Boolean = true
open public fun getName() : String? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
open public fun init(name : String?) : Identifier {
val __ = Identifier(name, false)
@@ -1,4 +1,12 @@
public open class Test(_myName : String?, _a : Boolean, _b : Double, _c : Float, _d : Long, _e : Int, _f : Short, _g : Char) {
private val myName : String?
private var a : Boolean = false
private var b : Double = 0.dbl
private var c : Float = 0.flt
private var d : Long = 0
private var e : Int = 0
private var f : Short = 0
private var g : Char = ' '
{
myName = _myName
a = _a
@@ -9,14 +17,6 @@ e = _e
f = _f
g = _g
}
private val myName : String? = null
private var a : Boolean = false
private var b : Double = 0.dbl
private var c : Float = 0.flt
private var d : Long = 0
private var e : Int = 0
private var f : Short = 0
private var g : Char = ' '
class object {
open public fun init() : Test {
val __ = Test(null, false, 0.dbl, 0.flt, 0, 0, 0, ' ')
+4 -4
View File
@@ -1,14 +1,14 @@
package demo
enum class MyEnum(_color : Int) {
{
color = _color
}
RED : MyEnum(10)
BLUE : MyEnum(20)
private val color : Int = 0
private val color : Int
public fun getColor() : Int {
return color
}
{
color = _color
}
public fun name() : String { return "" }
public fun order() : Int { return 0 }
}
@@ -1,7 +1,4 @@
enum class Color(c : Int) {
{
code = c
}
WHITE : Color(21)
BLACK : Color(22)
RED : Color(23)
@@ -11,6 +8,9 @@ private var code : Int = 0
public fun getCode() : Int {
return code
}
{
code = c
}
public fun name() : String { return "" }
public fun order() : Int { return 0 }
}
@@ -1,12 +1,12 @@
package demo
enum class Color(c : Int) {
{
code = c
}
private var code : Int = 0
public fun getCode() : Int {
return code
}
{
code = c
}
public fun name() : String { return "" }
public fun order() : Int { return 0 }
}
@@ -3,11 +3,11 @@ open class `$$$$$`() {
open class `$`() {
}
open class `$$`(`$$$$` : `$$$$$`?) : `$`() {
{
`$$$` = `$$$$`
}
val `$$$` : `$$$$$`? = null
val `$$$` : `$$$$$`?
open public fun `$$$$$$`() : `$$$$$`? {
return `$$$`
}
{
`$$$` = `$$$$`
}
}
@@ -1,8 +1,8 @@
open class Base<T>(name : T?) {
}
open class One<T, K>(name : T?, second : K?) : Base<T?>(name) {
private var mySecond : K? = null
{
mySecond = second
}
private var mySecond : K? = null
}
@@ -1,8 +1,8 @@
open class Base(name : String?) {
}
open class One(name : String?, second : String?) : Base(name) {
private var mySecond : String? = null
{
mySecond = second
}
private var mySecond : String? = null
}
+8
View File
@@ -0,0 +1,8 @@
package demo;
class C {
private final int i;
public C(int i) {
this.i = i;
}
}
+7
View File
@@ -0,0 +1,7 @@
package demo
open class C(i : Int) {
private val i : Int
{
this.i = i
}
}
+4 -4
View File
@@ -1,14 +1,14 @@
public open class Identifier<T>(_myName : T?, _myHasDollar : Boolean) {
{
myName = _myName
myHasDollar = _myHasDollar
}
private val myName : T? = null
private var myHasDollar : Boolean = false
private var myNullable : Boolean = true
open public fun getName() : T? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
open public fun init<T>(name : T?) : Identifier<T> {
val __ = Identifier(name, false)
+3 -3
View File
@@ -1,13 +1,13 @@
package com.voltvoodoo.saplo4j.model
import java.io.Serializable
public open class Language(code : String?) : Serializable {
{
this.code = code
}
protected var code : String? = null
override public fun toString() : String? {
return this.code
}
{
this.code = code
}
}
open class Base() {
open fun test() : Unit {
+3 -3
View File
@@ -1,13 +1,13 @@
package com.voltvoodoo.saplo4j.model
import java.io.Serializable
public open class Language(code : String?) : Serializable {
{
this.code = code
}
protected var code : String? = null
open public fun equals(other : Language?) : Boolean {
return other?.toString()?.equals(this.toString()).sure()
}
{
this.code = code
}
class object {
public var ENGLISH : Language? = Language("en")
public var SWEDISH : Language? = Language("sv")
+7
View File
@@ -0,0 +1,7 @@
package demo
open class C(a : Int) {
var abc : Int = 0
{
abc = (a * 2)
}
}