From be9a3d10f61531fd8e4d20982b2c2f8dfbd04847 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 22 May 2015 11:46:41 +0300 Subject: [PATCH] DeprecatedSymbolUsageFix: fixed bug with symbols from root package not imported --- .../kotlin/idea/caches/resolve/KotlinCacheService.kt | 7 ++++--- .../kotlin/idea/caches/resolve/ResolutionFacade.kt | 2 +- .../codeInsight/KotlinCopyPasteReferenceProcessor.kt | 2 +- .../imports/rootPackage.after.Declaration.kt | 6 ++++++ .../deprecatedSymbolUsage/imports/rootPackage.after.kt | 9 +++++++++ .../imports/rootPackage.before.Declaration.kt | 6 ++++++ .../imports/rootPackage.before.Main.kt | 8 ++++++++ .../idea/quickfix/QuickFixMultiFileTestGenerated.java | 6 ++++++ 8 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.Declaration.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Declaration.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Main.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt index 9b65e297f77..2c36fd963d1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt @@ -72,11 +72,12 @@ public class KotlinCacheService(val project: Project) { return cache.getLazyResolveSession(file).getScopeProvider().getFileScope(file) } - override fun resolveImportReference(file: JetFile, fqName: FqName): Collection { + override fun resolveImportReference(file: JetFile, fqName: FqName, isDefaultImport: Boolean): Collection { val importDirective = JetPsiFactory(project).createImportDirective(ImportPath(fqName, false)) val moduleDescriptor = findModuleDescriptor(file) - val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor) - val resolver = cache.getLazyResolveSession(file).getQualifiedExpressionResolver() + val resolveSession = cache.getLazyResolveSession(file) + val scope = JetModuleUtil.getImportsResolutionScope(moduleDescriptor, !isDefaultImport) + val resolver = resolveSession.getQualifiedExpressionResolver() return resolver.processImportReference( importDirective, scope, scope, BindingTraceContext(), QualifiedExpressionResolver.LookupMode.EVERYTHING).getAllDescriptors() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacade.kt index d747a78643b..fe03f040ae5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacade.kt @@ -38,7 +38,7 @@ public trait ResolutionFacade { public fun getFileTopLevelScope(file: JetFile): JetScope //TODO: better pass ModuleDescriptor here - public fun resolveImportReference(file: JetFile, fqName: FqName): Collection + public fun resolveImportReference(file: JetFile, fqName: FqName, isDefaultImport: Boolean = false): Collection public fun findModuleDescriptor(element: JetElement): ModuleDescriptor diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index c8b57f8fa72..aa3e98b41ea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -310,7 +310,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor { - return file.getResolutionFacade().resolveImportReference(file, fqName) + return file.getResolutionFacade().resolveImportReference(file, fqName, isDefaultImport = true/*TODO: temporary hack until we don't have ability to insert qualified reference into root package*/) } private fun findCallableToImport(fqName: FqName, file: JetFile): CallableDescriptor? diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.Declaration.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.Declaration.kt new file mode 100644 index 00000000000..65113265b11 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.Declaration.kt @@ -0,0 +1,6 @@ +@deprecated("", ReplaceWith("newFun()")) +fun oldFun() { + newFun() +} + +fun newFun() {} diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.kt new file mode 100644 index 00000000000..1124efdca92 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.after.kt @@ -0,0 +1,9 @@ +// "Replace with 'newFun()'" "true" +package pack5 + +import newFun +import oldFun + +fun foo() { + newFun() +} diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Declaration.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Declaration.kt new file mode 100644 index 00000000000..65113265b11 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Declaration.kt @@ -0,0 +1,6 @@ +@deprecated("", ReplaceWith("newFun()")) +fun oldFun() { + newFun() +} + +fun newFun() {} diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Main.kt b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Main.kt new file mode 100644 index 00000000000..e63f4c6502a --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Main.kt @@ -0,0 +1,8 @@ +// "Replace with 'newFun()'" "true" +package pack5 + +import oldFun + +fun foo() { + oldFun() +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index cf672be4447..ae068dcda83 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -889,6 +889,12 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes public void testAllFilesPresentInImports() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/deprecatedSymbolUsage/imports"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true); } + + @TestMetadata("rootPackage.before.Main.kt") + public void testRootPackage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/imports/rootPackage.before.Main.kt"); + doTestWithExtraFile(fileName); + } } @TestMetadata("idea/testData/quickfix/deprecatedSymbolUsage/wholeProject")