From 79d9ea67168d0d20f1f1fac32557b3eb98266629 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 16 Mar 2018 18:16:37 +0300 Subject: [PATCH] Check module is from given set of modules before passing it to callbacks `module` variable is fetched from `moduleInfoByDescriptor`, and this map is filled in `createModuleDescriptor`, witch is called in `doGetDescriptorForModule` only for modules from the given set. --- .../org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 7de4d434371..42350171304 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -166,6 +166,8 @@ class ResolverForProjectImpl( return@compute delegateResolver.resolverForModuleDescriptor(descriptor) } resolverByModuleDescriptor.getOrPut(descriptor) { + checkModuleIsCorrect(module) + ResolverForModuleComputationTracker.getInstance(projectContext.project)?.onResolverComputed(module) analyzerFacade(module).createResolverForModule( @@ -184,15 +186,19 @@ class ResolverForProjectImpl( } override fun descriptorForModule(moduleInfo: M): ModuleDescriptorImpl { - if (!isCorrectModuleInfo(moduleInfo)) { - diagnoseUnknownModuleInfo(listOf(moduleInfo)) - } + checkModuleIsCorrect(moduleInfo) return doGetDescriptorForModule(moduleInfo) } override fun diagnoseUnknownModuleInfo(infos: List) = throw AssertionError("$name does not know how to resolve $infos") + private fun checkModuleIsCorrect(moduleInfo: M) { + if (!isCorrectModuleInfo(moduleInfo)) { + diagnoseUnknownModuleInfo(listOf(moduleInfo)) + } + } + private fun doGetDescriptorForModule(module: M): ModuleDescriptorImpl { if (module in modules) { return projectContext.storageManager.compute {