From a94c13be6de74c0fb3893bdac9faaa845d229236 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 1 Jun 2015 18:47:59 +0300 Subject: [PATCH] KotlinCacheService: allow to get ResolveSessionForBodies by module descriptor Utility to resolve import in file by fq name --- .../kotlin/analyzer/AnalyzerFacade.kt | 12 +++---- .../idea/caches/resolve/KotlinCacheService.kt | 5 ++- .../idea/caches/resolve/KotlinResolveCache.kt | 5 +++ .../caches/resolve/ModuleDependencyMapper.kt | 32 ++++++++++++------- .../idea/caches/resolve/ResolutionFacade.kt | 3 +- .../idea/caches/resolve/resolutionApi.kt | 6 ++++ .../kotlin/idea/core/KotlinIndicesHelper.kt | 14 ++------ .../KotlinCopyPasteReferenceProcessor.kt | 3 +- .../copy/ConvertJavaCopyPastePostProcessor.kt | 4 +-- .../kotlin/idea/j2k/J2kPostProcessor.kt | 3 +- .../quickfix/DeprecatedSymbolUsageFixBase.kt | 5 +-- .../quickfix/ReplaceWithAnnotationAnalyzer.kt | 12 +++---- .../kotlin/addImport/AbstractAddImportTest.kt | 4 +-- ...AbstractEditorForEvaluateExpressionTest.kt | 4 +-- 14 files changed, 61 insertions(+), 51 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index f6a008c5d1f..ceebabf4261 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -36,13 +36,15 @@ public trait ResolverForModule { } public trait ResolverForProject { - public fun resolverForModule(moduleInfo: M): R + public fun resolverForModule(moduleInfo: M): R = resolverForModuleDescriptor(descriptorForModule(moduleInfo)) public fun descriptorForModule(moduleInfo: M): ModuleDescriptor + public fun resolverForModuleDescriptor(descriptor: ModuleDescriptor): R + val allModules: Collection } public class EmptyResolverForProject : ResolverForProject { - override fun resolverForModule(moduleInfo: M): R = throw IllegalStateException("Should not be called for $moduleInfo") + override fun resolverForModuleDescriptor(descriptor: ModuleDescriptor): R = throw IllegalStateException("$descriptor is not contained in this resolver") override fun descriptorForModule(moduleInfo: M) = throw IllegalStateException("Should not be called for $moduleInfo") override val allModules: Collection = listOf() } @@ -63,10 +65,8 @@ public class ResolverForProjectImpl( } } - override fun resolverForModule(moduleInfo: M): R { - assertCorrectModuleInfo(moduleInfo) - val descriptor = descriptorByModule[moduleInfo] ?: return delegateResolver.resolverForModule(moduleInfo) - return resolverByModuleDescriptor[descriptor]!! + override fun resolverForModuleDescriptor(descriptor: ModuleDescriptor): R { + return resolverByModuleDescriptor[descriptor] ?: return delegateResolver.resolverForModuleDescriptor(descriptor) } override fun descriptorForModule(moduleInfo: M): ModuleDescriptorImpl { 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 3c063f6712a..88a26a5e6ee 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 @@ -71,10 +71,9 @@ public class KotlinCacheService(val project: Project) { return cache.getLazyResolveSession(file).getScopeProvider().getFileScope(file) } - override fun resolveImportReference(file: JetFile, fqName: FqName, isDefaultImport: Boolean): Collection { + override fun resolveImportReference(moduleDescriptor: ModuleDescriptor, fqName: FqName, isDefaultImport: Boolean): Collection { val importDirective = JetPsiFactory(project).createImportDirective(ImportPath(fqName, false)) - val moduleDescriptor = findModuleDescriptor(file) - val resolveSession = cache.getLazyResolveSession(file) + val resolveSession = cache.getLazyResolveSession(moduleDescriptor) val scope = JetModuleUtil.getImportsResolutionScope(moduleDescriptor, !isDefaultImport) val resolver = resolveSession.getQualifiedExpressionResolver() return resolver.processImportReference( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt index 12c8dae0889..fe2d1a4a1bc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.context.SimpleGlobalContext import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.context.withProject +import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.di.InjectorForLazyBodyResolve import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies @@ -67,6 +68,10 @@ private class KotlinResolveCache( return moduleResolverProvider.resolveSessionForBodiesByModule(element.getModuleInfo()) } + public fun getLazyResolveSession(moduleDescriptor: ModuleDescriptor): ResolveSessionForBodies { + return moduleResolverProvider.resolveSessionForBodiesByDescriptor(moduleDescriptor) + } + public fun get(extension: CacheExtension): T { return extension.getData(moduleResolverProvider) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt index c04bdba0bfc..66570d3404b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ModuleRootManager import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.context.GlobalContextImpl import org.jetbrains.kotlin.context.withProject +import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl @@ -69,14 +70,15 @@ fun createModuleResolverProvider( val resolverForProject = createResolverForProject() - val moduleToBodiesResolveSession = modulesToCreateResolversFor.keysToMap { - module -> - val analyzer = resolverForProject.resolverForModule(module) + val moduleDescriptors = modulesToCreateResolversFor.map { resolverForProject.descriptorForModule(it) } + val resolveSessionsForBodyByDescriptor = moduleDescriptors.keysToMap { + descriptor -> + val analyzer = resolverForProject.resolverForModuleDescriptor(descriptor) ResolveSessionForBodies(project, analyzer.lazyResolveSession) } return ModuleResolverProviderImpl( resolverForProject, - moduleToBodiesResolveSession, + resolveSessionsForBodyByDescriptor, globalContext, delegateProvider ) @@ -110,7 +112,12 @@ private fun collectAllModuleInfosFromIdeaModel(project: Project): List } @@ -118,22 +125,23 @@ object EmptyModuleResolverProvider: ModuleResolverProvider { override val exceptionTracker: ExceptionTracker get() = throw IllegalStateException("Should not be called") - override fun resolveSessionForBodiesByModule(module: IdeaModuleInfo): ResolveSessionForBodies - = throw IllegalStateException("Trying to obtain resolve session for unknown $module") - override val resolverForProject: ResolverForProject = EmptyResolverForProject() + override fun resolveSessionForBodiesByDescriptor(descriptor: ModuleDescriptor): ResolveSessionForBodies { + throw IllegalStateException("Trying to obtain resolve session for $descriptor not present in this resolver") + } } class ModuleResolverProviderImpl( override val resolverForProject: ResolverForProject, - private val bodiesResolveByModule: Map, + private val bodiesResolveByDescriptor: Map, val globalContext: GlobalContextImpl, val delegateProvider: ModuleResolverProvider = EmptyModuleResolverProvider ): ModuleResolverProvider { override val exceptionTracker: ExceptionTracker = globalContext.exceptionTracker - override fun resolveSessionForBodiesByModule(module: IdeaModuleInfo): ResolveSessionForBodies = - bodiesResolveByModule[module] ?: - delegateProvider.resolveSessionForBodiesByModule(module) + override fun resolveSessionForBodiesByDescriptor(descriptor: ModuleDescriptor): ResolveSessionForBodies { + return bodiesResolveByDescriptor[descriptor] ?: delegateProvider.resolveSessionForBodiesByDescriptor(descriptor) + } + } 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 fe03f040ae5..6c6fb041334 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 @@ -37,8 +37,7 @@ public trait ResolutionFacade { public fun getFileTopLevelScope(file: JetFile): JetScope - //TODO: better pass ModuleDescriptor here - public fun resolveImportReference(file: JetFile, fqName: FqName, isDefaultImport: Boolean = false): Collection + public fun resolveImportReference(moduleDescriptor: ModuleDescriptor, fqName: FqName, isDefaultImport: Boolean = false): Collection public fun findModuleDescriptor(element: JetElement): ModuleDescriptor diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index e36eb8907e6..0bc9a41cc3a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetDeclaration import org.jetbrains.kotlin.psi.JetElement import org.jetbrains.kotlin.psi.JetFile @@ -33,6 +34,11 @@ public fun JetDeclaration.resolveToDescriptor(): DeclarationDescriptor { return getResolutionFacade().resolveToDescriptor(this) } +public fun JetFile.resolveImportReference(fqName: FqName, isDefaultImport: Boolean = false): Collection { + val facade = getResolutionFacade() + return facade.resolveImportReference(facade.findModuleDescriptor(this), fqName, isDefaultImport) +} + //NOTE: the difference between analyze and analyzeFully is 'intentionally' unclear // in theory they do the same thing via different code // analyze - see ResolveSessionForBodies, ResolveElementCache diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt index 4f7a9312c07..52f238ca2ef 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt @@ -57,7 +57,7 @@ public class KotlinIndicesHelper( declarations.addTopLevelNonExtensionCallablesByName(JetPropertyShortNameIndex.getInstance(), name) return declarations.flatMap { if (it.getContainingJetFile().isCompiled()) { //TODO: it's temporary while resolveToDescriptor does not work for compiled declarations - analyzeImportReference(it.getFqName()!!).filterIsInstance() + resolutionFacade.resolveImportReference(moduleDescriptor, it.getFqName()!!).filterIsInstance() } else { (resolutionFacade.resolveToDescriptor(it) as? CallableDescriptor).singletonOrEmptyList() @@ -158,7 +158,7 @@ public class KotlinIndicesHelper( for (declaration in declarations) { if (declaration.getContainingJetFile().isCompiled()) { //TODO: it's temporary while resolveToDescriptor does not work for compiled declarations - for (descriptor in analyzeImportReference(declaration.getFqName()!!)) { + for (descriptor in resolutionFacade.resolveImportReference(moduleDescriptor, declaration.getFqName()!!)) { if (descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null) { processDescriptor(descriptor) } @@ -194,16 +194,8 @@ public class KotlinIndicesHelper( } private fun findTopLevelCallables(fqName: FqName): Collection { - return analyzeImportReference(fqName) + return resolutionFacade.resolveImportReference(moduleDescriptor, fqName) .filterIsInstance() .filter { it.getExtensionReceiverParameter() == null } } - - private fun analyzeImportReference(fqName: FqName): Collection { - val importDirective = JetPsiFactory(project).createImportDirective(ImportPath(fqName, false)) - val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor) - val qualifiedExpressionResolver = QualifiedExpressionResolver() - qualifiedExpressionResolver.setSymbolUsageValidator(SymbolUsageValidator.Empty) - return qualifiedExpressionResolver.processImportReference(importDirective, scope, scope, BindingTraceContext(), LookupMode.EVERYTHING).getAllDescriptors() - } } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index aa3e98b41ea..0b0281be30e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.codeInsight.shorten.performDelayedShortening import org.jetbrains.kotlin.idea.conversion.copy.end import org.jetbrains.kotlin.idea.conversion.copy.range @@ -310,7 +311,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor { - return file.getResolutionFacade().resolveImportReference(file, fqName, isDefaultImport = true/*TODO: temporary hack until we don't have ability to insert qualified reference into root package*/) + return file.resolveImportReference(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/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt index ba045b09d7c..b363688354a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt @@ -30,7 +30,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiJavaFile import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.codeInsight.KotlinCopyPasteReferenceProcessor import org.jetbrains.kotlin.idea.codeInsight.KotlinReferenceData import org.jetbrains.kotlin.idea.editor.JetEditorOptions @@ -97,7 +97,7 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor - targetFile.getResolutionFacade().resolveImportReference(targetFile, fqName).firstOrNull()?.let { + targetFile.resolveImportReference(fqName).firstOrNull()?.let { ImportInsertHelper.getInstance(project).importDescriptor(targetFile, it) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt index c66324eb6cd..dcf174f3953 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt @@ -25,6 +25,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.intentions.IfNullToElvisIntention import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArgumentsIntention import org.jetbrains.kotlin.idea.intentions.SimplifyNegatedBinaryExpressionIntention @@ -52,7 +53,7 @@ public class J2kPostProcessor(private val formatCode: Boolean) : PostProcessor { } override fun insertImport(file: JetFile, fqName: FqName) { - val descriptors = file.getResolutionFacade().resolveImportReference(file, fqName) + val descriptors = file.resolveImportReference(fqName) descriptors.firstOrNull()?.let { ImportInsertHelper.getInstance(file.getProject()).importDescriptor(file, it) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt index 9790a62c6c9..4daafc615bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/DeprecatedSymbolUsageFixBase.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester import org.jetbrains.kotlin.idea.core.refactoring.JetNameValidator @@ -90,7 +91,7 @@ public abstract class DeprecatedSymbolUsageFixBase( val resolvedCall = element.getResolvedCall(bindingContext)!! val descriptor = resolvedCall.getResultingDescriptor() - val replacement = ReplaceWithAnnotationAnalyzer.analyze(replaceWith, descriptor, element.getResolutionFacade(), file, project) + val replacement = ReplaceWithAnnotationAnalyzer.analyze(replaceWith, descriptor, element.getResolutionFacade(), project) invoke(resolvedCall, bindingContext, replacement, project, editor) } @@ -223,7 +224,7 @@ public abstract class DeprecatedSymbolUsageFixBase( val file = result.getContainingJetFile() replacement.fqNamesToImport - .flatMap { file.getResolutionFacade().resolveImportReference(file, it) } + .flatMap { file.resolveImportReference(it) } .forEach { ImportInsertHelper.getInstance(project).importDescriptor(file, it) } result = postProcessInsertedExpression(result, wrapper.addedStatements) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt index 687d553e9b9..46bbf27de10 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt @@ -18,8 +18,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiRecursiveElementVisitor import org.jetbrains.kotlin.analyzer.analyzeInContext import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor @@ -34,13 +32,15 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.* +import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType +import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.scopes.* import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver import org.jetbrains.kotlin.utils.Printer @@ -65,21 +65,19 @@ object ReplaceWithAnnotationAnalyzer { annotation: ReplaceWith, symbolDescriptor: CallableDescriptor, resolutionFacade: ResolutionFacade, - file: JetFile/*TODO: drop it*/, project: Project ): ReplacementExpression { val originalDescriptor = (if (symbolDescriptor is CallableMemberDescriptor) DescriptorUtils.unwrapFakeOverride(symbolDescriptor) else symbolDescriptor).getOriginal() - return analyzeOriginal(annotation, originalDescriptor, resolutionFacade, file, project) + return analyzeOriginal(annotation, originalDescriptor, resolutionFacade, project) } private fun analyzeOriginal( annotation: ReplaceWith, symbolDescriptor: CallableDescriptor, resolutionFacade: ResolutionFacade, - file: JetFile/*TODO: drop it*/, project: Project ): ReplacementExpression { val psiFactory = JetPsiFactory(project) @@ -91,7 +89,7 @@ object ReplaceWithAnnotationAnalyzer { .filter { it.isSafe() } .mapTo(LinkedHashSet()) { it.toSafe() } - val explicitlyImportedSymbols = importFqNames.flatMap { resolutionFacade.resolveImportReference(file, it) } + val explicitlyImportedSymbols = importFqNames.flatMap { resolutionFacade.resolveImportReference(symbolDescriptor.module, it) } val symbolScope = getResolutionScope(symbolDescriptor) val scope = ChainedScope(symbolDescriptor, "ReplaceWith resolution scope", ExplicitImportsScope(explicitlyImportedSymbols), symbolScope) diff --git a/idea/tests/org/jetbrains/kotlin/addImport/AbstractAddImportTest.kt b/idea/tests/org/jetbrains/kotlin/addImport/AbstractAddImportTest.kt index 821799e375f..42e0f72de96 100644 --- a/idea/tests/org/jetbrains/kotlin/addImport/AbstractAddImportTest.kt +++ b/idea/tests/org/jetbrains/kotlin/addImport/AbstractAddImportTest.kt @@ -20,7 +20,7 @@ import com.intellij.psi.PsiDocumentManager import org.jetbrains.kotlin.AbstractImportsTest import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetFile @@ -38,7 +38,7 @@ public abstract class AbstractAddImportTest : AbstractImportsTest() { descriptorName = descriptorName.substring("class:".length()).trim() } - val descriptors = file.getResolutionFacade().resolveImportReference(file, FqName(descriptorName)).filter(filter) + val descriptors = file.resolveImportReference(FqName(descriptorName)).filter(filter) when { descriptors.isEmpty() -> diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt index b7b3ba86aa4..cdbb507dfae 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt @@ -24,7 +24,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture import org.jetbrains.kotlin.checkers.AbstractJetPsiCheckerTest import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully -import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.completion.test.AbstractJvmBasicCompletionTest import org.jetbrains.kotlin.idea.completion.test.ExpectedCompletionUtils import org.jetbrains.kotlin.idea.completion.test.handlers.AbstractCompletionHandlerTest @@ -51,7 +51,7 @@ public abstract class AbstractCodeFragmentHighlightingTest : AbstractJetPsiCheck val fileText = FileUtil.loadFile(File(filePath), true) val file = myFixture.getFile() as JetFile InTextDirectivesUtils.findListWithPrefixes(fileText, "// IMPORT: ").forEach { - val descriptor = file.getResolutionFacade().resolveImportReference(file, FqName(it)).singleOrNull() + val descriptor = file.resolveImportReference(FqName(it)).singleOrNull() ?: error("Could not resolve descriptor to import: $it") ImportInsertHelper.getInstance(getProject()).importDescriptor(file, descriptor) }