diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt index c36a2da7abb..bd13c839118 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.project.builtIns import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtCollectionLiteralExpression import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtParameter @@ -40,11 +41,16 @@ class AddTypeAnnotationToValueParameterFix(element: KtParameter) : KotlinQuickFi init { val defaultValue = element.defaultValue var type = defaultValue?.getType(defaultValue.analyze(BodyResolveMode.PARTIAL)) - if (defaultValue is KtCollectionLiteralExpression && type != null && KotlinBuiltIns.isArray(type)) { - val builtIns = element.builtIns - val elementType = builtIns.getArrayElementType(type) - if (KotlinBuiltIns.isPrimitiveType(elementType)) { - type = builtIns.getPrimitiveArrayKotlinTypeByPrimitiveKotlinType(elementType) + if (type != null && KotlinBuiltIns.isArray(type)) { + if (element.hasModifier(KtTokens.VARARG_KEYWORD)) { + type = type.arguments.singleOrNull()?.type + } + else if (defaultValue is KtCollectionLiteralExpression) { + val builtIns = element.builtIns + val elementType = builtIns.getArrayElementType(type) + if (KotlinBuiltIns.isPrimitiveType(elementType)) { + type = builtIns.getPrimitiveArrayKotlinTypeByPrimitiveKotlinType(elementType) + } } } diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt new file mode 100644 index 00000000000..4949972608c --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt @@ -0,0 +1,4 @@ +// "Add type 'Double' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value = [1.0, 2.2]) \ No newline at end of file diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt.after b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt.after new file mode 100644 index 00000000000..fce4361f21c --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt.after @@ -0,0 +1,4 @@ +// "Add type 'Double' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value: Double = [1.0, 2.2]) \ No newline at end of file diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt new file mode 100644 index 00000000000..8ef3a1da1da --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt @@ -0,0 +1,4 @@ +// "Add type 'Int' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value = [1, 2]) \ No newline at end of file diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt.after b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt.after new file mode 100644 index 00000000000..1a0449edc3b --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt.after @@ -0,0 +1,4 @@ +// "Add type 'Int' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value: Int = [1, 2]) \ No newline at end of file diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt new file mode 100644 index 00000000000..5d9d54a57c5 --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt @@ -0,0 +1,4 @@ +// "Add type 'String' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value = ["alpha", "beta"]) \ No newline at end of file diff --git a/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt.after b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt.after new file mode 100644 index 00000000000..2672353705e --- /dev/null +++ b/idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt.after @@ -0,0 +1,4 @@ +// "Add type 'String' to parameter 'value'" "true" +// LANGUAGE_VERSION: 1.2 + +annotation class CollectionDefault(vararg val value: String = ["alpha", "beta"]) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ae511fdb100..9169bb14e14 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1025,6 +1025,24 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("annotationWithVarargArrayLiteralDouble.kt") + public void testAnnotationWithVarargArrayLiteralDouble() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralDouble.kt"); + doTest(fileName); + } + + @TestMetadata("annotationWithVarargArrayLiteralInt.kt") + public void testAnnotationWithVarargArrayLiteralInt() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralInt.kt"); + doTest(fileName); + } + + @TestMetadata("annotationWithVarargArrayLiteralString.kt") + public void testAnnotationWithVarargArrayLiteralString() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/annotationWithVarargArrayLiteralString.kt"); + doTest(fileName); + } + @TestMetadata("noDefaultValue.kt") public void testNoDefaultValue() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addTypeAnnotationToValueParameter/noDefaultValue.kt");