diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 07ce8fb2a90..b6e101e9fc6 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -670,7 +670,7 @@ public class Converter private(val project: Project, val settings: ConverterSett else { val expectedTypeConverted = typeConverter.convertType(expectedType) if (expectedTypeConverted is ArrayType) { - val array = createArrayInitializerExpression(expectedTypeConverted, componentsConverted) + val array = createArrayInitializerExpression(expectedTypeConverted, componentsConverted, needExplicitType = false) listOf(if (isVararg) StarExpression(array) else array) } else { diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Expressions.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Expressions.kt index 35415f9ccd6..e1e5d1ead1e 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Expressions.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Expressions.kt @@ -108,13 +108,14 @@ class StarExpression(val methodCall: MethodCallExpression) : Expression() { override fun toKotlin() = "*" + methodCall.toKotlin() } -fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List) : MethodCallExpression { +fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List, needExplicitType: Boolean) : MethodCallExpression { val elementType = arrayType.elementType - val createArrayFunction = if (elementType.isPrimitive()) { + val createArrayFunction = if (elementType.isPrimitive()) (elementType.toNotNullType().toKotlin() + "Array").decapitalize() - } - else + else if (needExplicitType) arrayType.toNotNullType().toKotlin().decapitalize() + else + "array" val doubleOrFloatTypes = setOf("double", "float", "java.lang.double", "java.lang.float") val afterReplace = arrayType.toNotNullType().toKotlin().replace("Array", "").toLowerCase().replace(">", "").replace("<", "").replace("?", "") diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 43fe4f2f50a..478fc774ae0 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -58,7 +58,8 @@ class ExpressionVisitor(private val converter: Converter, val expressionType = typeConverter.convertType(expression.getType()) assert(expressionType is ArrayType, "Array initializer must have array type") result = createArrayInitializerExpression(expressionType as ArrayType, - converter.convertExpressions(expression.getInitializers())) + converter.convertExpressions(expression.getInitializers()), + needExplicitType = true/*TODO: it's often redundant*/) } override fun visitAssignmentExpression(expression: PsiAssignmentExpression) { diff --git a/j2k/tests/testData/ast/annotations/annotationUsages.kt b/j2k/tests/testData/ast/annotations/annotationUsages.kt index 853a29131eb..ced7214ba69 100644 --- a/j2k/tests/testData/ast/annotations/annotationUsages.kt +++ b/j2k/tests/testData/ast/annotations/annotationUsages.kt @@ -1,13 +1,13 @@ import javaApi.* -Anon1(value = array("a"), stringArray = array("b"), intArray = intArray(1, 2), string = "x") +Anon1(value = array("a"), stringArray = array("b"), intArray = intArray(1, 2), string = "x") Anon2(value = "a", intValue = 1, charValue = 'a') -Anon3(e = E.A, stringArray = array(), value = *array("a", "b")) +Anon3(e = E.A, stringArray = array(), value = *array("a", "b")) Anon4("x", "y") Anon5(1) -Anon6(array("x", "y")) +Anon6(array("x", "y")) Anon7(javaClass(), javaClass()) -Anon8(classes = *array>(javaClass(), javaClass())) +Anon8(classes = *array(javaClass(), javaClass())) class C() { Anon5(1) deprecated("") private var field1: Int = 0 @@ -19,7 +19,7 @@ class C() { Anon5(1) var field4: Int = 0 - Anon6(array()) + Anon6(array()) fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) { [deprecated("")] [Anon5(3)] val c = 'a' }