AnalyzerFacade: compute module dependencies lazily

This commit is contained in:
Pavel V. Talanov
2015-06-10 20:23:39 +03:00
parent 705f35450f
commit 846c0e2522
2 changed files with 27 additions and 12 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.context.withModule
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleParameters
import org.jetbrains.kotlin.descriptors.impl.LazyModuleDependencies
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.JetFile
@@ -135,18 +136,23 @@ public trait AnalyzerFacade<A : ResolverForModule, in P : PlatformAnalysisParame
val resolverForProject = createResolverForProject()
fun computeDependencyDescriptors(module: M): List<ModuleDescriptorImpl> {
val dependenciesDescriptors = module.dependencies().mapTo(ArrayList<ModuleDescriptorImpl>()) {
dependencyInfo ->
resolverForProject.descriptorForModule(dependencyInfo as M)
}
val builtinsModule = KotlinBuiltIns.getInstance().getBuiltInsModule()
module.dependencyOnBuiltins().adjustDependencies(builtinsModule, dependenciesDescriptors)
return dependenciesDescriptors
}
fun setupModuleDependencies() {
modules.forEach {
module ->
val currentModule = resolverForProject.descriptorForModule(module)
val dependenciesDescriptors = module.dependencies().mapTo(ArrayList<ModuleDescriptorImpl>()) {
dependencyInfo ->
resolverForProject.descriptorForModule(dependencyInfo as M)
}
val builtinsModule = KotlinBuiltIns.getInstance().getBuiltInsModule()
module.dependencyOnBuiltins().adjustDependencies(builtinsModule, dependenciesDescriptors)
currentModule.setDependencies(dependenciesDescriptors)
resolverForProject.descriptorForModule(module).setDependencies(
LazyModuleDependencies(projectContext.storageManager) { computeDependencyDescriptors(module) }
)
}
}
@@ -191,4 +197,3 @@ public trait AnalyzerFacade<A : ResolverForModule, in P : PlatformAnalysisParame
public val moduleParameters: ModuleParameters
}
@@ -107,8 +107,18 @@ public class ModuleDescriptorImpl(
get() = KotlinBuiltIns.getInstance()
}
public class ModuleDependenciesImpl(override val descriptors: List<ModuleDescriptorImpl>) : ModuleDependencies
public interface ModuleDependencies {
public val descriptors: List<ModuleDescriptorImpl>
}
public class ModuleDependenciesImpl(override val descriptors: List<ModuleDescriptorImpl>) : ModuleDependencies
public class LazyModuleDependencies(
storageManager: StorageManager,
computeDependencies: () -> List<ModuleDescriptorImpl>
) : ModuleDependencies {
private val dependencies = storageManager.createLazyValue(computeDependencies)
override val descriptors: List<ModuleDescriptorImpl>
get() = dependencies()
}