Refactor, move TargetPlatform to ModuleInfo

This commit is contained in:
Alexander Udalov
2017-04-18 17:27:48 +03:00
parent 9a8dc14616
commit a96b67ea29
5 changed files with 10 additions and 14 deletions
@@ -128,6 +128,7 @@ interface ModuleInfo {
get() = false get() = false
val name: Name val name: Name
fun dependencies(): List<ModuleInfo> fun dependencies(): List<ModuleInfo>
val platform: TargetPlatform? get() = null
fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> = listOf() fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> = listOf()
fun dependencyOnBuiltIns(): DependencyOnBuiltIns = DependenciesOnBuiltIns.LAST fun dependencyOnBuiltIns(): DependencyOnBuiltIns = DependenciesOnBuiltIns.LAST
val capabilities: Map<ModuleDescriptor.Capability<*>, Any?> val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
@@ -71,7 +71,7 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
) )
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
if (moduleInfo is LibraryModuleInfo && moduleInfo.libraryPlatform == JsPlatform) { if (moduleInfo is LibraryModuleInfo && moduleInfo.platform == JsPlatform) {
val providers = moduleInfo.getLibraryRoots() val providers = moduleInfo.getLibraryRoots()
.flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) } .flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) }
.filter { it.version.isCompatible() } .filter { it.version.isCompatible() }
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.TargetPlatform
interface LibraryModuleInfo : ModuleInfo { interface LibraryModuleInfo : ModuleInfo {
val libraryPlatform: TargetPlatform override val platform: TargetPlatform
fun getLibraryRoots(): Collection<String> fun getLibraryRoots(): Collection<String>
} }
@@ -98,8 +98,12 @@ private fun ideaModelDependencies(module: Module, productionOnly: Boolean): List
interface ModuleSourceInfo : IdeaModuleInfo { interface ModuleSourceInfo : IdeaModuleInfo {
val module: Module val module: Module
override val moduleOrigin: ModuleOrigin override val moduleOrigin: ModuleOrigin
get() = ModuleOrigin.MODULE get() = ModuleOrigin.MODULE
override val platform: TargetPlatform
get() = TargetPlatformDetector.getPlatform(module)
} }
data class ModuleProductionSourceInfo(override val module: Module) : ModuleSourceInfo { data class ModuleProductionSourceInfo(override val module: Module) : ModuleSourceInfo {
@@ -201,7 +205,7 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo,
return result.toList() return result.toList()
} }
override val libraryPlatform: TargetPlatform override val platform: TargetPlatform
get() = TargetPlatformDetector.getPlatform(library) get() = TargetPlatformDetector.getPlatform(library)
override val sourcesModuleInfo: SourceForBinaryModuleInfo override val sourcesModuleInfo: SourceForBinaryModuleInfo
@@ -28,12 +28,10 @@ import org.jetbrains.kotlin.analyzer.ModuleContent
import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.ResolverForProject import org.jetbrains.kotlin.analyzer.ResolverForProject
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo
import org.jetbrains.kotlin.context.GlobalContextImpl import org.jetbrains.kotlin.context.GlobalContextImpl
import org.jetbrains.kotlin.context.withProject import org.jetbrains.kotlin.context.withProject
import org.jetbrains.kotlin.idea.project.AnalyzerFacadeProvider import org.jetbrains.kotlin.idea.project.AnalyzerFacadeProvider
import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.IdeaEnvironment
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -82,11 +80,11 @@ fun createModuleResolverProvider(
return AnalyzerFacade.setupResolverForProject( return AnalyzerFacade.setupResolverForProject(
debugName, globalContext.withProject(project), modulesToCreateResolversFor, debugName, globalContext.withProject(project), modulesToCreateResolversFor,
{ module -> AnalyzerFacadeProvider.getAnalyzerFacade(module.getTargetPlatform() ?: platform) }, { module -> AnalyzerFacadeProvider.getAnalyzerFacade(module.platform ?: platform) },
modulesContent, jvmPlatformParameters, IdeaEnvironment, builtInsProvider, modulesContent, jvmPlatformParameters, IdeaEnvironment, builtInsProvider,
delegateResolver, { _, c -> IDEPackagePartProvider(c.moduleContentScope) }, delegateResolver, { _, c -> IDEPackagePartProvider(c.moduleContentScope) },
sdk?.let { SdkInfo(project, it) }, sdk?.let { SdkInfo(project, it) },
modulePlatforms = { module -> module.getTargetPlatform()?.multiTargetPlatform } modulePlatforms = { module -> module.platform?.multiTargetPlatform }
) )
} }
@@ -105,13 +103,6 @@ fun createModuleResolverProvider(
) )
} }
private fun ModuleInfo.getTargetPlatform(): TargetPlatform? =
when (this) {
is ModuleSourceInfo -> TargetPlatformDetector.getPlatform(module)
is LibraryModuleInfo -> libraryPlatform
else -> null
}
fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModuleInfo> { fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModuleInfo> {
val ideaModules = ModuleManager.getInstance(project).modules.toList() val ideaModules = ModuleManager.getInstance(project).modules.toList()
val modulesSourcesInfos = ideaModules.flatMap { listOf(it.productionSourceInfo(), it.testSourceInfo()) } val modulesSourcesInfos = ideaModules.flatMap { listOf(it.productionSourceInfo(), it.testSourceInfo()) }