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.context.withModule
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.LazyModuleDependencies
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
@@ -135,18 +136,23 @@ public trait AnalyzerFacade<A : ResolverForModule, in P : PlatformAnalysisParame
|
|||||||
|
|
||||||
val resolverForProject = createResolverForProject()
|
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() {
|
fun setupModuleDependencies() {
|
||||||
modules.forEach {
|
modules.forEach {
|
||||||
module ->
|
module ->
|
||||||
val currentModule = resolverForProject.descriptorForModule(module)
|
resolverForProject.descriptorForModule(module).setDependencies(
|
||||||
val dependenciesDescriptors = module.dependencies().mapTo(ArrayList<ModuleDescriptorImpl>()) {
|
LazyModuleDependencies(projectContext.storageManager) { computeDependencyDescriptors(module) }
|
||||||
dependencyInfo ->
|
)
|
||||||
resolverForProject.descriptorForModule(dependencyInfo as M)
|
|
||||||
}
|
|
||||||
|
|
||||||
val builtinsModule = KotlinBuiltIns.getInstance().getBuiltInsModule()
|
|
||||||
module.dependencyOnBuiltins().adjustDependencies(builtinsModule, dependenciesDescriptors)
|
|
||||||
currentModule.setDependencies(dependenciesDescriptors)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,4 +197,3 @@ public trait AnalyzerFacade<A : ResolverForModule, in P : PlatformAnalysisParame
|
|||||||
|
|
||||||
public val moduleParameters: ModuleParameters
|
public val moduleParameters: ModuleParameters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,8 +107,18 @@ public class ModuleDescriptorImpl(
|
|||||||
get() = KotlinBuiltIns.getInstance()
|
get() = KotlinBuiltIns.getInstance()
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModuleDependenciesImpl(override val descriptors: List<ModuleDescriptorImpl>) : ModuleDependencies
|
|
||||||
|
|
||||||
public interface ModuleDependencies {
|
public interface ModuleDependencies {
|
||||||
public val descriptors: List<ModuleDescriptorImpl>
|
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