diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt index e10df49bc54..74b8a0db2e5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess +import org.jetbrains.kotlin.resolve.descriptorUtil.isCompanionObject import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver @@ -160,7 +161,14 @@ class CodeToInlineBuilder( //TODO: other types of references ('[]' etc) if (expression.canBeResolvedViaImport(target, bindingContext)) { - codeToInline.fqNamesToImport.add(target.importableFqName!!) + val importableFqName = if (target.isCompanionObject()) { + target.containingDeclaration?.importableFqName + } else { + target.importableFqName + } + if (importableFqName != null) { + codeToInline.fqNamesToImport.add(importableFqName) + } } if (expression.getReceiverExpression() == null) { diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.after.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.after.kt new file mode 100644 index 00000000000..2141dedddce --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.after.kt @@ -0,0 +1,13 @@ +// "Replace with 'A.bar(x)'" "true" + +package test + +import a.A + +@Deprecated("bla", ReplaceWith("A.bar(x)", "a.A")) +fun foo(x: Any) { +} + +fun test() { + A.bar(1) +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Dependency.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Dependency.kt new file mode 100644 index 00000000000..7fc11b34402 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Dependency.kt @@ -0,0 +1,7 @@ +package a + +class A { + companion object { + fun bar(x: Any) {} + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Main.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Main.kt new file mode 100644 index 00000000000..3e285843d39 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Main.kt @@ -0,0 +1,11 @@ +// "Replace with 'A.bar(x)'" "true" + +package test + +@Deprecated("bla", ReplaceWith("A.bar(x)", "a.A")) +fun foo(x: Any) { +} + +fun test() { + foo(1) +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.after.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.after.kt new file mode 100644 index 00000000000..2141dedddce --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.after.kt @@ -0,0 +1,13 @@ +// "Replace with 'A.bar(x)'" "true" + +package test + +import a.A + +@Deprecated("bla", ReplaceWith("A.bar(x)", "a.A")) +fun foo(x: Any) { +} + +fun test() { + A.bar(1) +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Dependency.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Dependency.kt new file mode 100644 index 00000000000..26f55a6ef14 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Dependency.kt @@ -0,0 +1,7 @@ +package a + +class A { + companion object F { + fun bar(x: Any) {} + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Main.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Main.kt new file mode 100644 index 00000000000..3e285843d39 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Main.kt @@ -0,0 +1,11 @@ +// "Replace with 'A.bar(x)'" "true" + +package test + +@Deprecated("bla", ReplaceWith("A.bar(x)", "a.A")) +fun foo(x: Any) { +} + +fun test() { + foo(1) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 54c31e7483e..96033d4016e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -2555,6 +2555,16 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes KotlinTestUtils.runTest(this::doTestWithExtraFile, TargetBackend.ANY, testDataFilePath); } + @TestMetadata("addImportForCompanionObject.before.Main.kt") + public void testAddImportForCompanionObject() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject.before.Main.kt"); + } + + @TestMetadata("addImportForCompanionObject2.before.Main.kt") + public void testAddImportForCompanionObject2() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForCompanionObject2.before.Main.kt"); + } + @TestMetadata("addImportForOperator.before.Main.kt") public void testAddImportForOperator() throws Exception { runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportForOperator.before.Main.kt");