diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt index 097d084a474..65a1e0d6c46 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt @@ -32,13 +32,13 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.CommentSaver import org.jetbrains.kotlin.idea.core.OptionalParametersHelper import org.jetbrains.kotlin.idea.core.asExpression +import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester import org.jetbrains.kotlin.idea.core.refactoring.JetNameValidator import org.jetbrains.kotlin.idea.intentions.setType import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.idea.util.ShortenReferences -import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* @@ -52,7 +52,7 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.* -import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant +import org.jetbrains.kotlin.resolve.constants.StringValue import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -113,8 +113,9 @@ public abstract class DeprecatedSymbolUsageFixBase( val replaceWithValue = annotation.argumentValue("replaceWith"/*TODO*/) as? AnnotationDescriptor ?: return null val pattern = replaceWithValue.argumentValue("expression"/*TODO*/) as? String ?: return null if (pattern.isEmpty()) return null - val imports = (replaceWithValue.argumentValue("imports"/*TODO*/) as? List>) - ?.map { it.getValue() } ?: emptyList() + val importValues = replaceWithValue.argumentValue("imports"/*TODO*/) as? List<*> ?: return null + if (importValues.any { it !is StringValue }) return null + val imports = importValues.map { (it as StringValue).getValue() } // should not be available for descriptors with optional parameters if we cannot fetch default values for them (currently for library with no sources) if (descriptor is CallableDescriptor && diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/incorrectArgs.kt b/idea/testData/quickfix/deprecatedSymbolUsage/incorrectArgs.kt new file mode 100644 index 00000000000..f5fb3e78443 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/incorrectArgs.kt @@ -0,0 +1,13 @@ +// "class org.jetbrains.kotlin.idea.quickfix.DeprecatedSymbolUsageFix" "false" +// ERROR: An integer literal does not conform to the expected type kotlin.String + +@deprecated("", ReplaceWith("newFun()", imports = 123)) +fun oldFun() { + newFun() +} + +fun newFun(){} + +fun foo() { + oldFun() +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ce1aa6d47aa..f89a5085249 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2938,6 +2938,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("incorrectArgs.kt") + public void testIncorrectArgs() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/incorrectArgs.kt"); + doTest(fileName); + } + @TestMetadata("incorrectReplacement.kt") public void testIncorrectReplacement() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/incorrectReplacement.kt");