Java to Kotlin: annotations conversion - no redundant array type arguments
#KT-4487 Fixed
This commit is contained in:
@@ -670,7 +670,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
|||||||
else {
|
else {
|
||||||
val expectedTypeConverted = typeConverter.convertType(expectedType)
|
val expectedTypeConverted = typeConverter.convertType(expectedType)
|
||||||
if (expectedTypeConverted is ArrayType) {
|
if (expectedTypeConverted is ArrayType) {
|
||||||
val array = createArrayInitializerExpression(expectedTypeConverted, componentsConverted)
|
val array = createArrayInitializerExpression(expectedTypeConverted, componentsConverted, needExplicitType = false)
|
||||||
listOf(if (isVararg) StarExpression(array) else array)
|
listOf(if (isVararg) StarExpression(array) else array)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -108,13 +108,14 @@ class StarExpression(val methodCall: MethodCallExpression) : Expression() {
|
|||||||
override fun toKotlin() = "*" + methodCall.toKotlin()
|
override fun toKotlin() = "*" + methodCall.toKotlin()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Expression>) : MethodCallExpression {
|
fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Expression>, needExplicitType: Boolean) : MethodCallExpression {
|
||||||
val elementType = arrayType.elementType
|
val elementType = arrayType.elementType
|
||||||
val createArrayFunction = if (elementType.isPrimitive()) {
|
val createArrayFunction = if (elementType.isPrimitive())
|
||||||
(elementType.toNotNullType().toKotlin() + "Array").decapitalize()
|
(elementType.toNotNullType().toKotlin() + "Array").decapitalize()
|
||||||
}
|
else if (needExplicitType)
|
||||||
else
|
|
||||||
arrayType.toNotNullType().toKotlin().decapitalize()
|
arrayType.toNotNullType().toKotlin().decapitalize()
|
||||||
|
else
|
||||||
|
"array"
|
||||||
|
|
||||||
val doubleOrFloatTypes = setOf("double", "float", "java.lang.double", "java.lang.float")
|
val doubleOrFloatTypes = setOf("double", "float", "java.lang.double", "java.lang.float")
|
||||||
val afterReplace = arrayType.toNotNullType().toKotlin().replace("Array", "").toLowerCase().replace(">", "").replace("<", "").replace("?", "")
|
val afterReplace = arrayType.toNotNullType().toKotlin().replace("Array", "").toLowerCase().replace(">", "").replace("<", "").replace("?", "")
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ class ExpressionVisitor(private val converter: Converter,
|
|||||||
val expressionType = typeConverter.convertType(expression.getType())
|
val expressionType = typeConverter.convertType(expression.getType())
|
||||||
assert(expressionType is ArrayType, "Array initializer must have array type")
|
assert(expressionType is ArrayType, "Array initializer must have array type")
|
||||||
result = createArrayInitializerExpression(expressionType as ArrayType,
|
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) {
|
override fun visitAssignmentExpression(expression: PsiAssignmentExpression) {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import javaApi.*
|
import javaApi.*
|
||||||
|
|
||||||
Anon1(value = array<String>("a"), stringArray = array<String>("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')
|
Anon2(value = "a", intValue = 1, charValue = 'a')
|
||||||
Anon3(e = E.A, stringArray = array<String>(), value = *array<String>("a", "b"))
|
Anon3(e = E.A, stringArray = array(), value = *array("a", "b"))
|
||||||
Anon4("x", "y")
|
Anon4("x", "y")
|
||||||
Anon5(1)
|
Anon5(1)
|
||||||
Anon6(array<String>("x", "y"))
|
Anon6(array("x", "y"))
|
||||||
Anon7(javaClass<String>(), javaClass<StringBuilder>())
|
Anon7(javaClass<String>(), javaClass<StringBuilder>())
|
||||||
Anon8(classes = *array<Class<*>>(javaClass<String>(), javaClass<StringBuilder>()))
|
Anon8(classes = *array(javaClass<String>(), javaClass<StringBuilder>()))
|
||||||
class C() {
|
class C() {
|
||||||
Anon5(1) deprecated("") private var field1: Int = 0
|
Anon5(1) deprecated("") private var field1: Int = 0
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ class C() {
|
|||||||
Anon5(1)
|
Anon5(1)
|
||||||
var field4: Int = 0
|
var field4: Int = 0
|
||||||
|
|
||||||
Anon6(array<String>())
|
Anon6(array())
|
||||||
fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) {
|
fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) {
|
||||||
[deprecated("")] [Anon5(3)] val c = 'a'
|
[deprecated("")] [Anon5(3)] val c = 'a'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user