KT-1016 Add initializers for fields more correctly
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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, ' ')
|
||||
|
||||
@@ -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
-1
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package demo;
|
||||
|
||||
class C {
|
||||
private final int i;
|
||||
public C(int i) {
|
||||
this.i = i;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package demo
|
||||
open class C(i : Int) {
|
||||
private val i : Int
|
||||
{
|
||||
this.i = i
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package demo
|
||||
open class C(a : Int) {
|
||||
var abc : Int = 0
|
||||
{
|
||||
abc = (a * 2)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user