AnalyzerFacade: compute module dependencies lazily
This commit is contained in:
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user