KT-813 Convert arrays correctly

This commit is contained in:
Sergey Ignatov
2011-12-13 15:03:55 +04:00
parent 3d8804a246
commit e6390dce85
25 changed files with 38 additions and 16 deletions
@@ -9,15 +9,26 @@ import java.util.List;
* @author ignatov
*/
public class ArrayInitializerExpression extends Expression {
private Type myType;
private final List<Expression> myInitializers;
public ArrayInitializerExpression(List<Expression> initializers) {
public ArrayInitializerExpression(final Type type, List<Expression> initializers) {
myType = type;
myInitializers = initializers;
}
@NotNull
private static String createArrayFunction(@NotNull final Type type) {
String sType = type.convertedToNotNull().toKotlin().replace("Array", "").toLowerCase();
if (!sType.equals("any") && PRIMITIVE_TYPES.contains(sType))
return sType + "Array";
return AstUtil.lowerFirstCharacter(type.convertedToNotNull().toKotlin());
}
@NotNull
@Override
public String toKotlin() {
return "array" + "(" + AstUtil.joinNodes(myInitializers, COMMA_WITH_SPACE) + ")";
return createArrayFunction(myType) + "(" + AstUtil.joinNodes(myInitializers, COMMA_WITH_SPACE) + ")";
}
}
@@ -48,6 +48,10 @@ public class AstUtil {
return string.substring(0, 1).toUpperCase() + string.substring(1);
}
public static String lowerFirstCharacter(String string) {
return string.substring(0, 1).toLowerCase() + string.substring(1);
}
public static List<String> createListWithEmptyString(final List<Expression> arguments) {
final List<String> conversions = new LinkedList<String>();
//noinspection UnusedDeclaration
@@ -42,6 +42,7 @@ public class ExpressionVisitor extends StatementVisitor {
public void visitArrayInitializerExpression(PsiArrayInitializerExpression expression) {
super.visitArrayInitializerExpression(expression);
myResult = new ArrayInitializerExpression(
typeToType(expression.getType()),
expressionsToExpressionList(expression.getInitializers())
);
}
@@ -1 +1 @@
array(1, 2, 3)
intArray(1, 2, 3)
@@ -1 +0,0 @@
{1, 2, 3};
@@ -1 +0,0 @@
array(1, 2, 3)
@@ -1 +0,0 @@
{a, b, c};
@@ -1 +0,0 @@
array(a, b, c)
@@ -1 +0,0 @@
{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
@@ -1 +0,0 @@
array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9))
@@ -0,0 +1 @@
byte[] a = new byte[] {1, 2, 3};
@@ -0,0 +1 @@
var a : ByteArray? = byteArray(1, 2, 3)
@@ -0,0 +1 @@
int[] a = {1, 2, 3};
@@ -0,0 +1 @@
var a : IntArray? = intArray(1, 2, 3)
@@ -0,0 +1,2 @@
int a = 0, b = 0, c = 0;
int is[] = {a, b, c};
@@ -0,0 +1,4 @@
var a : Int = 0
var b : Int = 0
var c : Int = 0
var `is` : IntArray? = intArray(a, b, c)
@@ -0,0 +1 @@
int[][] a = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
@@ -0,0 +1 @@
var a : Array<IntArray?>? = array<IntArray?>(intArray(1, 2, 3), intArray(4, 5, 6), intArray(7, 8, 9))
@@ -1 +1 @@
var d2 : Array<IntArray?>? = array()
var d2 : Array<IntArray?>? = array<IntArray?>()
@@ -1 +1 @@
var a : DoubleArray? = array(1, 2, 3)
var a : DoubleArray? = doubleArray(1, 2, 3)
@@ -1 +1 @@
var a : LongArray? = array(1, 2, 3)
var a : LongArray? = longArray(1, 2, 3)
@@ -1 +1 @@
var a : IntArray? = array(1, 2, 3)
var a : IntArray? = intArray(1, 2, 3)
@@ -1 +1 @@
var a : Array<String?>? = array("abc")
var a : Array<String?>? = array<String?>("abc")
@@ -1 +1 @@
var constrArgTypes : Array<Class<*>?>? = array(getJavaClass<Array<String?>?>, getJavaClass<String?>)
var constrArgTypes : Array<Class<*>?>? = array<Class<*>?>(getJavaClass<Array<String?>?>, getJavaClass<String?>)
+1 -1
View File
@@ -1,6 +1,6 @@
namespace demo
open class Test() {
open fun test(vararg var args : Any?) : Unit {
args = array(1, 2, 3)
args = array<Int?>(1, 2, 3)
}
}