KT-813 Convert arrays correctly
This commit is contained in:
@@ -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,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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user