From dba5e97b7a381232b4403949749c9949ac54880e Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 15 Nov 2011 14:31:18 +0400 Subject: [PATCH] added default params for all primitive types --- src/org/jetbrains/jet/j2k/Converter.java | 34 ++++++++-------- .../file/withManyDefaultParams.jav | 24 +++++++++++ .../file/withManyDefaultParams.kt | 40 +++++++++++++++++++ 3 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 testData/ast/constructors/file/withManyDefaultParams.jav create mode 100644 testData/ast/constructors/file/withManyDefaultParams.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index f7067cc5a7e..cb5152eb47b 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -87,10 +87,6 @@ public class Converter { final IdentifierImpl name = new IdentifierImpl(psiClass.getName()); final List baseClassParams = new LinkedList(); -// for (PsiType t : psiClass.getExtendsListTypes()) -// if (t != null && t instanceof PsiClassType) { -// final PsiClass resolve = ((PsiClassType) t).resolve(); -// if (resolve != null) { final SuperVisitor visitor = new SuperVisitor(); psiClass.accept(visitor); final HashSet resolvedSuperCallParameters = visitor.getResolvedSuperCallParameters(); @@ -100,20 +96,18 @@ public class Converter { resolvedSuperCallParameters.toArray(new PsiExpressionList[1])[0].getExpressions() ) ); -// } -// } // we create primary constructor if (!psiClass.isEnum() && !psiClass.isInterface() && getPrimaryConstructorForThisCase(psiClass) == null) { final List finalOrWithEmptyInitializer = getFinalOrWithEmptyInitializer(fields); final Map initializers = new HashMap(); - for (Field f : finalOrWithEmptyInitializer) { - String init = getDefaultInitializer(f); - initializers.put(f.getIdentifier().toKotlin(), init); - } - for (final Function f : methods) { + for (Field fo : finalOrWithEmptyInitializer) { + String init = getDefaultInitializer(fo); + initializers.put(fo.getIdentifier().toKotlin(), init); + } + // and modify secondaries if (f.getKind() == INode.Kind.CONSTRUCTOR && !((Constructor) f).isPrimary()) { final List newStatements = new LinkedList(); @@ -126,7 +120,7 @@ public class Converter { if (assignmentExpression.getLeft().getKind() == INode.Kind.CALL_CHAIN) { for (Field fo : finalOrWithEmptyInitializer) { final String id = fo.getIdentifier().toKotlin(); - if (((CallChainExpression) assignmentExpression.getLeft()).getIdentifier().toKotlin().endsWith(id)) { + if (((CallChainExpression) assignmentExpression.getLeft()).getIdentifier().toKotlin().endsWith("." + id)) { initializers.put(id, assignmentExpression.getRight().toKotlin()); isRemoved = true; } @@ -172,12 +166,16 @@ public class Converter { } private static String getDefaultInitializer(Field f) { - if (f.getType().isNullable()) return "null"; - - final String typeToKotlin = f.getType().toKotlin(); - if (typeToKotlin.equals("Boolean")) return "false"; - if (typeToKotlin.equals("Int")) return "0"; - return "TYPE: " + typeToKotlin + " HAVEN'T DEFAULT VALUE"; + if (f.getType().isNullable()) + return "null"; + else { + final String typeToKotlin = f.getType().toKotlin(); + if (typeToKotlin.equals("Boolean")) return "false"; + if (typeToKotlin.equals("Char")) return "' '"; + if (typeToKotlin.equals("Double")) return "0.dbl"; + if (typeToKotlin.equals("Float")) return "0.flt"; + return "0"; + } } // TODO: hack for enums diff --git a/testData/ast/constructors/file/withManyDefaultParams.jav b/testData/ast/constructors/file/withManyDefaultParams.jav new file mode 100644 index 00000000000..c8d04543b0b --- /dev/null +++ b/testData/ast/constructors/file/withManyDefaultParams.jav @@ -0,0 +1,24 @@ +public class Test { + private final String myName; + private boolean a; + private double b; + private float c; + private long d; + private int e; + private short f; + private char g; + + public Test() {} + + public Test(String name) { + myName = foo(name); + } + + static String foo(String n) {return "";} +} + +public class User { + public static void main() { + Test t = new Test("name"); + } +} \ No newline at end of file diff --git a/testData/ast/constructors/file/withManyDefaultParams.kt b/testData/ast/constructors/file/withManyDefaultParams.kt new file mode 100644 index 00000000000..06b13888509 --- /dev/null +++ b/testData/ast/constructors/file/withManyDefaultParams.kt @@ -0,0 +1,40 @@ +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 +private var b : Double +private var c : Float +private var d : Long +private var e : Int +private var f : Short +private var g : Char +class object { +open public fun init() : Test { +val __ = Test(null, false, 0.dbl, 0.flt, 0, 0, 0, ' ') +return __ +} +open public fun init(name : String?) : Test { +val __ = Test(foo(name), false, 0.dbl, 0.flt, 0, 0, 0, ' ') +return __ +} +open fun foo(n : String?) : String? { +return "" +} +} +{ +$myName = myName +$a = a +$b = b +$c = c +$d = d +$e = e +$f = f +$g = g +} +} +public open class User() { +class object { +open public fun main() : Unit { +var t : Test? = Test.init("name") +} +} +} \ No newline at end of file