Don't insert import if deprecation replacement contains stdlib typealias

Fixed #KT-14781
This commit is contained in:
Vladimir Dolzhenko
2020-02-06 15:47:09 +01:00
parent 2249c223fe
commit 44cf0a9f72
4 changed files with 30 additions and 1 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.references.canBeResolvedViaImport
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
@@ -34,10 +35,12 @@ 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.fqNameOrNull
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
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.sure
@@ -167,7 +170,12 @@ class CodeToInlineBuilder(
target.importableFqName
}
if (importableFqName != null) {
codeToInline.fqNamesToImport.add(importableFqName)
val lexicalScope = (expression?.containingFile as? KtFile)?.getResolutionScope(bindingContext, resolutionFacade)
val lookupName = importableFqName?.let {
lexicalScope?.findClassifier(it.shortName(), NoLookupLocation.FROM_IDE)?.typeConstructor
?.declarationDescriptor?.fqNameOrNull()
}
codeToInline.fqNamesToImport.add(lookupName ?: importableFqName)
}
}
@@ -0,0 +1,8 @@
// "Replace with 'Exception()'" "true"
// RUNTIME_WITH_FULL_JDK
package ppp
@Deprecated("do not use", ReplaceWith("Exception()"))
fun x(): Throwable = RuntimeException()
val e = <caret>x()
@@ -0,0 +1,8 @@
// "Replace with 'Exception()'" "true"
// RUNTIME_WITH_FULL_JDK
package ppp
@Deprecated("do not use", ReplaceWith("Exception()"))
fun x(): Throwable = RuntimeException()
val e = <caret>Exception()
@@ -6980,6 +6980,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/onlyAliasDeprecated.kt");
}
@TestMetadata("stdlibAliased.kt")
public void testStdlibAliased() throws Exception {
runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/stdlibAliased.kt");
}
@TestMetadata("transitiveFromClass.kt")
public void testTransitiveFromClass() throws Exception {
runTest("idea/testData/quickfix/deprecatedSymbolUsage/typeAliases/transitiveFromClass.kt");