From d02867a8317a3ff0e091db87c067faae0a7a75cd Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 5 Jan 2019 13:53:13 +0900 Subject: [PATCH] Add "Wrap with array literal" quick fix for annotation parameters #KT-28969 Fixed --- .../QuickFixFactoryForTypeMismatchError.kt | 5 ++++ .../idea/quickfix/WrapWithArrayLiteralFix.kt | 25 +++++++++++++++++++ .../typeMismatch/wrapWithArrayLiteral.kt | 6 +++++ .../wrapWithArrayLiteral.kt.after | 6 +++++ .../idea/quickfix/QuickFixTestGenerated.java | 5 ++++ 5 files changed, 47 insertions(+) create mode 100644 idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithArrayLiteralFix.kt create mode 100644 idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt create mode 100644 idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt index 18f3d7e6ea1..be95bbe4012 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt @@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.builtins.getFunctionalClassKind +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil +import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.util.approximateWithResolvableType import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.name.FqName @@ -239,6 +241,9 @@ class QuickFixFactoryForTypeMismatchError : KotlinIntentionActionsFactory() { || KotlinBuiltIns.isPrimitiveArray(expectedType) ) { actions.add(AddArrayOfTypeFix(diagnosticElement, expectedType)) + if (diagnosticElement.languageVersionSettings.supportsFeature(LanguageFeature.ArrayLiteralsInAnnotations)) { + actions.add(WrapWithArrayLiteralFix(diagnosticElement)) + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithArrayLiteralFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithArrayLiteralFix.kt new file mode 100644 index 00000000000..5a1c1853ca9 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithArrayLiteralFix.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.quickfix + +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.createExpressionByPattern + +class WrapWithArrayLiteralFix(expression: KtExpression) : KotlinQuickFixAction(expression) { + + override fun getFamilyName() = "Wrap with array literal" + + override fun getText() = "Wrap with []" + + override fun invoke(project: Project, editor: Editor?, file: KtFile) { + val element = element ?: return + element.replace(KtPsiFactory(project).createExpressionByPattern("[$0]", element)) + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt b/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt new file mode 100644 index 00000000000..22574329648 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt @@ -0,0 +1,6 @@ +// "Wrap with []" "true" + +annotation class Foo(val value: Array) + +@Foo(value = "abc") +class Bar \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt.after b/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt.after new file mode 100644 index 00000000000..23032b8c1f3 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt.after @@ -0,0 +1,6 @@ +// "Wrap with []" "true" + +annotation class Foo(val value: Array) + +@Foo(value = ["abc"]) +class Bar \ 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 ff4a96b52ce..93a83205d85 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -12394,6 +12394,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/typeMismatch/when3.kt"); } + @TestMetadata("wrapWithArrayLiteral.kt") + public void testWrapWithArrayLiteral() throws Exception { + runTest("idea/testData/quickfix/typeMismatch/wrapWithArrayLiteral.kt"); + } + @TestMetadata("idea/testData/quickfix/typeMismatch/casts") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)