From 02c17378b1d3c5c5ec886ecb362f8059361cc8a3 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 12 Oct 2019 13:33:34 +0900 Subject: [PATCH] Replace deprecated symbol usage: replace imported object function correctly #KT-33951 Fixed --- .../kotlin/idea/codeInliner/CodeToInlineBuilder.kt | 11 +++++++---- .../importedObjectFunctionAddReceiver.kt | 13 +++++++++++++ .../importedObjectFunctionAddReceiver.kt.after | 13 +++++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt index ae862ddb250..0fc184f8b5a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.sure import java.util.* @@ -175,10 +176,12 @@ class CodeToInlineBuilder( } if (expression.getReceiverExpression() == null) { - if (target is ValueParameterDescriptor && target.containingDeclaration == targetCallable) { - expression.putCopyableUserData(CodeToInline.PARAMETER_USAGE_KEY, target.name) - } else if (target is TypeParameterDescriptor && target.containingDeclaration == targetCallable) { - expression.putCopyableUserData(CodeToInline.TYPE_PARAMETER_USAGE_KEY, target.name) + (targetCallable.safeAs>()?.callableFromObject ?: targetCallable).let { + if (target is ValueParameterDescriptor && target.containingDeclaration == it) { + expression.putCopyableUserData(CodeToInline.PARAMETER_USAGE_KEY, target.name) + } else if (target is TypeParameterDescriptor && target.containingDeclaration == it) { + expression.putCopyableUserData(CodeToInline.TYPE_PARAMETER_USAGE_KEY, target.name) + } } if (targetCallable !is ImportedFromObjectCallableDescriptor<*>) { diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt b/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt new file mode 100644 index 00000000000..b1cef27650e --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt @@ -0,0 +1,13 @@ +// "Replace with 'str.isEmpty()'" "true" +// WITH_RUNTIME + +import Bar.bar + +fun foo(s: String) { + bar(s) +} + +object Bar { + @Deprecated(message = "", replaceWith = ReplaceWith("str.isEmpty()")) + fun bar(str: String): Boolean = str.isEmpty() +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt.after new file mode 100644 index 00000000000..0d6fd44b892 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt.after @@ -0,0 +1,13 @@ +// "Replace with 'str.isEmpty()'" "true" +// WITH_RUNTIME + +import Bar.bar + +fun foo(s: String) { + s.isEmpty() +} + +object Bar { + @Deprecated(message = "", replaceWith = ReplaceWith("str.isEmpty()")) + fun bar(str: String): Boolean = str.isEmpty() +} \ 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 88fdc8612f3..f1cd35623c1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6150,6 +6150,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunction.kt"); } + @TestMetadata("importedObjectFunctionAddReceiver.kt") + public void testImportedObjectFunctionAddReceiver() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/importedObjectFunctionAddReceiver.kt"); + } + @TestMetadata("importedObjectProperty.kt") public void testImportedObjectProperty() throws Exception { runTest("idea/testData/quickfix/deprecatedSymbolUsage/importedObjectProperty.kt");