diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt index 0327f9e488f..97e1a20a355 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt @@ -79,7 +79,7 @@ object ReplaceWithAnnotationAnalyzer { val languageVersionSettings = resolutionFacade.getFrontendService(LanguageVersionSettings::class.java) val scope = getResolutionScope( symbolDescriptor, symbolDescriptor, - listOf(explicitImportsScope) + defaultImportsScopes, languageVersionSettings + listOf(explicitImportsScope), defaultImportsScopes, languageVersionSettings ) ?: return null val expressionTypingServices = resolutionFacade.getFrontendService(module, ExpressionTypingServices::class.java) @@ -110,7 +110,7 @@ object ReplaceWithAnnotationAnalyzer { val scope = getResolutionScope( symbolDescriptor, symbolDescriptor, - listOf(explicitImportsScope) + defaultImportScopes, + listOf(explicitImportsScope), defaultImportScopes, resolutionFacade.getFrontendService(LanguageVersionSettings::class.java) ) ?: return null @@ -175,6 +175,7 @@ object ReplaceWithAnnotationAnalyzer { private fun getResolutionScope( descriptor: DeclarationDescriptor, ownerDescriptor: DeclarationDescriptor, + explicitScopes: Collection, additionalScopes: Collection, languageVersionSettings: LanguageVersionSettings ): LexicalScope? { @@ -184,21 +185,23 @@ object ReplaceWithAnnotationAnalyzer { getResolutionScope( moduleDescriptor.getPackage(descriptor.fqName), ownerDescriptor, + explicitScopes, additionalScopes, languageVersionSettings ) } is PackageViewDescriptor -> { + val memberAsImportingScope = descriptor.memberScope.memberScopeAsImportingScope() LexicalScope.Base( - chainImportingScopes(listOf(descriptor.memberScope.memberScopeAsImportingScope()) + additionalScopes)!!, + chainImportingScopes(explicitScopes + listOf(memberAsImportingScope) + additionalScopes)!!, ownerDescriptor ) } is ClassDescriptor -> { val outerScope = getResolutionScope( - descriptor.containingDeclaration, ownerDescriptor, additionalScopes, languageVersionSettings + descriptor.containingDeclaration, ownerDescriptor, explicitScopes, additionalScopes, languageVersionSettings ) ?: return null ClassResolutionScopesSupport( descriptor, @@ -209,7 +212,7 @@ object ReplaceWithAnnotationAnalyzer { is TypeAliasDescriptor -> { val outerScope = getResolutionScope( - descriptor.containingDeclaration, ownerDescriptor, additionalScopes, languageVersionSettings + descriptor.containingDeclaration, ownerDescriptor, explicitScopes, additionalScopes, languageVersionSettings ) ?: return null LexicalScopeImpl( outerScope, @@ -227,14 +230,14 @@ object ReplaceWithAnnotationAnalyzer { is FunctionDescriptor -> { val outerScope = getResolutionScope( - descriptor.containingDeclaration, ownerDescriptor, additionalScopes, languageVersionSettings + descriptor.containingDeclaration, ownerDescriptor, explicitScopes, additionalScopes, languageVersionSettings ) ?: return null FunctionDescriptorUtil.getFunctionInnerScope(outerScope, descriptor, LocalRedeclarationChecker.DO_NOTHING) } is PropertyDescriptor -> { val outerScope = getResolutionScope( - descriptor.containingDeclaration, ownerDescriptor, additionalScopes, languageVersionSettings + descriptor.containingDeclaration, ownerDescriptor, explicitScopes, additionalScopes, languageVersionSettings ) ?: return null val propertyHeader = ScopeUtils.makeScopeForPropertyHeader(outerScope, descriptor) LexicalScopeImpl( diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.after.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.after.kt new file mode 100644 index 00000000000..a21228a3864 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.after.kt @@ -0,0 +1,14 @@ +// "Replace with 'gau()'" "true" + +package test + +import test.dependency.gau + +@Deprecated("...", ReplaceWith("gau()", "test.dependency.gau")) +fun gav() { + test.dependency.gau() +} + +fun use() { + gau() +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Dependency.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Dependency.kt new file mode 100644 index 00000000000..d45c2ccaacd --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Dependency.kt @@ -0,0 +1,3 @@ +package test.dependency + +fun gau() {} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Main.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Main.kt new file mode 100644 index 00000000000..89d175eb814 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Main.kt @@ -0,0 +1,12 @@ +// "Replace with 'gau()'" "true" + +package test + +@Deprecated("...", ReplaceWith("gau()", "test.dependency.gau")) +fun gav() { + test.dependency.gau() +} + +fun use() { + gav() +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.after.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.after.kt new file mode 100644 index 00000000000..478ecd7b26d --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.after.kt @@ -0,0 +1,14 @@ +// "Replace with 'gau()'" "true" + +package test + +import test.dependency.gau + +@Deprecated("...", ReplaceWith("gau()", "test.dependency.gau")) +fun gau() { + test.dependency.gau() +} + +fun use() { + gau() +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Dependency.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Dependency.kt new file mode 100644 index 00000000000..d45c2ccaacd --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Dependency.kt @@ -0,0 +1,3 @@ +package test.dependency + +fun gau() {} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Main.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Main.kt new file mode 100644 index 00000000000..d4f3c5a251f --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Main.kt @@ -0,0 +1,12 @@ +// "Replace with 'gau()'" "true" + +package test + +@Deprecated("...", ReplaceWith("gau()", "test.dependency.gau")) +fun gau() { + test.dependency.gau() +} + +fun use() { + gau() +} \ 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 b769db2efa3..d3ed1aecb15 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -2281,6 +2281,16 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImports.before.Main.kt"); } + @TestMetadata("addImportsSimple.before.Main.kt") + public void testAddImportsSimple() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Main.kt"); + } + + @TestMetadata("addImportsWithSameName.before.Main.kt") + public void testAddImportsWithSameName() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Main.kt"); + } + public void testAllFilesPresentInImports() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/deprecatedSymbolUsage/imports"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); } diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java.172 b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java.172 index 0cf1b7a6dbc..4630defc4fd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java.172 +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java.172 @@ -1558,6 +1558,16 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImports.before.Main.kt"); } + @TestMetadata("addImportsSimple.before.Main.kt") + public void testAddImportsSimple() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsSimple.before.Main.kt"); + } + + @TestMetadata("addImportsWithSameName.before.Main.kt") + public void testAddImportsWithSameName() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/imports/addImportsWithSameName.before.Main.kt"); + } + public void testAllFilesPresentInImports() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/deprecatedSymbolUsage/imports"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); }