diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/ClassUsageReplacementStrategy.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/ClassUsageReplacementStrategy.kt index 53a1f066f93..345c0259375 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/ClassUsageReplacementStrategy.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/ClassUsageReplacementStrategy.kt @@ -19,6 +19,9 @@ package org.jetbrains.kotlin.idea.codeInliner import com.intellij.openapi.project.Project import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.replaced +import org.jetbrains.kotlin.idea.references.KtSimpleNameReference +import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis @@ -55,13 +58,25 @@ class ClassUsageReplacementStrategy( is KtCallExpression -> { if (usage != parent.calleeExpression) return null when { -// constructorReplacementStrategy != null -> return constructorReplacementStrategy.createReplacer(usage) - constructorReplacementStrategy == null && typeReplacement != null -> return { replaceConstructorCallWithOtherTypeConstruction(parent) } + constructorReplacementStrategy == null && typeReplacement != null -> return { + replaceConstructorCallWithOtherTypeConstruction(parent) + } else -> return null } } - else -> return null //TODO + else -> { + if (typeReplacement != null) { + val fqNameStr = typeReplacement.text + val fqName = FqName(fqNameStr) + + return { + usage.mainReference.bindToFqName(fqName, KtSimpleNameReference.ShorteningMode.FORCED_SHORTENING) as? KtElement + } + } + + return null + } } } diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt b/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt new file mode 100644 index 00000000000..02689f27114 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt @@ -0,0 +1,13 @@ +// "Replace with 'New'" "true" +package some + +object New { + fun foo() {} +} + +@Deprecated("Use New", replaceWith = ReplaceWith("New")) +object Old { + fun foo() {} +} + +val test = Old.foo() \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt.after new file mode 100644 index 00000000000..cd6fe2dda80 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/objects.kt.after @@ -0,0 +1,13 @@ +// "Replace with 'New'" "true" +package some + +object New { + fun foo() {} +} + +@Deprecated("Use New", replaceWith = ReplaceWith("New")) +object Old { + fun foo() {} +} + +val test = New.foo() \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt b/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt new file mode 100644 index 00000000000..1de6c048a14 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt @@ -0,0 +1,13 @@ +// "Replace with 'New'" "true" +package some + +object New { + fun foo() {} +} + +@Deprecated("Use New", replaceWith = ReplaceWith("New")) +object Old { + fun foo() {} +} + +val test = some.Old \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt.after new file mode 100644 index 00000000000..54427d3becf --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt.after @@ -0,0 +1,13 @@ +// "Replace with 'New'" "true" +package some + +object New { + fun foo() {} +} + +@Deprecated("Use New", replaceWith = ReplaceWith("New")) +object Old { + fun foo() {} +} + +val test = New \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt b/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt new file mode 100644 index 00000000000..e250b991ea3 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt @@ -0,0 +1,11 @@ +// "Replace with 'New'" "true" +package ppp + +object New + +@Deprecated(message = "Deprecated, use New", replaceWith = ReplaceWith("New")) +typealias Old = New + +fun main(args: Array) { + val o = Old +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt.after new file mode 100644 index 00000000000..8d6e43dc447 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt.after @@ -0,0 +1,11 @@ +// "Replace with 'New'" "true" +package ppp + +object New + +@Deprecated(message = "Deprecated, use New", replaceWith = ReplaceWith("New")) +typealias Old = New + +fun main(args: Array) { + val o = New +} \ 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 d06818a5881..cef6349c444 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -5261,6 +5261,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/deprecatedSymbolUsage/noReplacement.kt"); } + @TestMetadata("objects.kt") + public void testObjects() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/objects.kt"); + } + + @TestMetadata("objectsInQualified.kt") + public void testObjectsInQualified() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/objectsInQualified.kt"); + } + @TestMetadata("operatorCall.kt") public void testOperatorCall() throws Exception { runTest("idea/testData/quickfix/deprecatedSymbolUsage/operatorCall.kt"); @@ -6024,6 +6034,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/constructorUsageWithConflict1.kt"); } + @TestMetadata("objectAliased.kt") + public void testObjectAliased() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/objectAliased.kt"); + } + @TestMetadata("onlyAliasDeprecated.kt") public void testOnlyAliasDeprecated() throws Exception { runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/onlyAliasDeprecated.kt");