"Add type" quick fix incorrectly processes vararg modifier with primitive type array initializer #KT-21544 Fixed

This commit is contained in:
Toshiaki Kameyama
2017-12-01 18:37:38 +09:00
committed by Dmitry Jemerov
parent 846e50dcaa
commit 4563cf250d
6 changed files with 29 additions and 2 deletions
@@ -41,9 +41,12 @@ class AddTypeAnnotationToValueParameterFix(element: KtParameter) : KotlinQuickFi
init {
val defaultValue = element.defaultValue
var type = defaultValue?.getType(defaultValue.analyze(BodyResolveMode.PARTIAL))
if (type != null && KotlinBuiltIns.isArray(type)) {
if (type != null && KotlinBuiltIns.isArrayOrPrimitiveArray(type)) {
if (element.hasModifier(KtTokens.VARARG_KEYWORD)) {
type = type.arguments.singleOrNull()?.type
type = if (KotlinBuiltIns.isPrimitiveArray(type))
element.builtIns.getArrayElementType(type)
else
type.arguments.singleOrNull()?.type
}
else if (defaultValue is KtCollectionLiteralExpression) {
val builtIns = element.builtIns
@@ -0,0 +1,3 @@
// "Add type 'Double' to parameter 'value'" "true"
class CollectionDefault(vararg val value = doubleArrayOf(1.0, 2.2)<caret>)
@@ -0,0 +1,3 @@
// "Add type 'Double' to parameter 'value'" "true"
class CollectionDefault(vararg val value: Double = doubleArrayOf(1.0, 2.2))
@@ -0,0 +1,3 @@
// "Add type 'Int' to parameter 'value'" "true"
class CollectionDefault(vararg val value = intArrayOf(1, 2)<caret>)
@@ -0,0 +1,3 @@
// "Add type 'Int' to parameter 'value'" "true"
class CollectionDefault(vararg val value: Int = intArrayOf(1, 2))
@@ -1043,6 +1043,18 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("annotationWithVarargDoubleArray.kt")
public void testAnnotationWithVarargDoubleArray() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargDoubleArray.kt");
doTest(fileName);
}
@TestMetadata("annotationWithVarargIntArray.kt")
public void testAnnotationWithVarargIntArray() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargIntArray.kt");
doTest(fileName);
}
@TestMetadata("noDefaultValue.kt")
public void testNoDefaultValue() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/noDefaultValue.kt");