Do not use CommonPlatforms directly in CommonResolverForModuleFactory

This allows to get rid of dependency of this code on CommonPlatforms,
which depends on all platforms (JVM, JS, Native), and eventually move it
to 'frontend'.
This commit is contained in:
Alexander Udalov
2020-03-15 12:24:42 +01:00
committed by Alexander Udalov
parent 8dd04789ad
commit 9e014e462b
4 changed files with 15 additions and 10 deletions
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.*
@@ -66,19 +65,17 @@ class CommonResolverForModuleFactory(
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>, override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>,
private val dependencies: Iterable<ModuleInfo>, private val dependencies: Iterable<ModuleInfo>,
override val expectedBy: List<ModuleInfo>, override val expectedBy: List<ModuleInfo>,
override val platform: TargetPlatform,
private val modulesWhoseInternalsAreVisible: Collection<ModuleInfo>, private val modulesWhoseInternalsAreVisible: Collection<ModuleInfo>,
private val dependOnOldBuiltIns: Boolean private val dependOnOldBuiltIns: Boolean
) : ModuleInfo { ) : ModuleInfo {
override fun dependencies() = listOf(this, *dependencies.toList().toTypedArray() ) override fun dependencies() = listOf(this, *dependencies.toList().toTypedArray())
override fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> = modulesWhoseInternalsAreVisible override fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> = modulesWhoseInternalsAreVisible
override fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns = override fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns =
if (dependOnOldBuiltIns) ModuleInfo.DependencyOnBuiltIns.LAST else ModuleInfo.DependencyOnBuiltIns.NONE if (dependOnOldBuiltIns) ModuleInfo.DependencyOnBuiltIns.LAST else ModuleInfo.DependencyOnBuiltIns.NONE
override val platform: TargetPlatform
get() = CommonPlatforms.defaultCommonPlatform
override val analyzerServices: PlatformDependentAnalyzerServices override val analyzerServices: PlatformDependentAnalyzerServices
get() = CommonPlatformAnalyzerServices get() = CommonPlatformAnalyzerServices
} }
@@ -98,11 +95,11 @@ class CommonResolverForModuleFactory(
moduleInfo moduleInfo
) )
val metadataPartProvider = (platformParameters as CommonAnalysisParameters).metadataPartProviderFactory(moduleContent) val metadataPartProvider = platformParameters.metadataPartProviderFactory(moduleContent)
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace() val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
val container = createContainerToResolveCommonCode( val container = createContainerToResolveCommonCode(
moduleContext, trace, declarationProviderFactory, moduleContentScope, targetEnvironment, metadataPartProvider, moduleContext, trace, declarationProviderFactory, moduleContentScope, targetEnvironment, metadataPartProvider,
languageVersionSettings, CommonPlatforms.defaultCommonPlatform, CommonPlatformAnalyzerServices, shouldCheckExpectActual languageVersionSettings, targetPlatform, CommonPlatformAnalyzerServices, shouldCheckExpectActual
) )
val packageFragmentProviders = val packageFragmentProviders =
@@ -119,6 +116,7 @@ class CommonResolverForModuleFactory(
companion object { companion object {
fun analyzeFiles( fun analyzeFiles(
files: Collection<KtFile>, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings, files: Collection<KtFile>, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings,
targetPlatform: TargetPlatform,
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap(), capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap(),
dependenciesContainer: CommonDependenciesContainer? = null, dependenciesContainer: CommonDependenciesContainer? = null,
metadataPartProviderFactory: (ModuleContent<ModuleInfo>) -> MetadataPartProvider metadataPartProviderFactory: (ModuleContent<ModuleInfo>) -> MetadataPartProvider
@@ -128,6 +126,7 @@ class CommonResolverForModuleFactory(
capabilities, capabilities,
dependenciesContainer?.moduleInfos?.toList().orEmpty(), dependenciesContainer?.moduleInfos?.toList().orEmpty(),
dependenciesContainer?.refinesModuleInfos.orEmpty(), dependenciesContainer?.refinesModuleInfos.orEmpty(),
targetPlatform,
dependenciesContainer?.friendModuleInfos.orEmpty(), dependenciesContainer?.friendModuleInfos.orEmpty(),
dependOnBuiltIns dependOnBuiltIns
) )
@@ -142,7 +141,7 @@ class CommonResolverForModuleFactory(
val resolverForModuleFactory = CommonResolverForModuleFactory( val resolverForModuleFactory = CommonResolverForModuleFactory(
CommonAnalysisParameters(metadataPartProviderFactory), CommonAnalysisParameters(metadataPartProviderFactory),
CompilerEnvironment, CompilerEnvironment,
CommonPlatforms.defaultCommonPlatform, targetPlatform,
shouldCheckExpectActual = false, shouldCheckExpectActual = false,
dependenciesContainer dependenciesContainer
) )
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import java.io.File import java.io.File
internal val KotlinCoreEnvironment.destDir: File? internal val KotlinCoreEnvironment.destDir: File?
@@ -49,6 +50,7 @@ private fun runCommonAnalysis(
analyzer.analyzeAndReport(files) { analyzer.analyzeAndReport(files) {
CommonResolverForModuleFactory.analyzeFiles( CommonResolverForModuleFactory.analyzeFiles(
files, moduleName, dependOnBuiltins, configuration.languageVersionSettings, files, moduleName, dependOnBuiltins, configuration.languageVersionSettings,
CommonPlatforms.defaultCommonPlatform,
dependenciesContainer = dependencyContainer dependenciesContainer = dependencyContainer
) { content -> ) { content ->
environment.createPackagePartProvider(content.moduleContentScope) environment.createPackagePartProvider(content.moduleContentScope)
@@ -56,4 +58,4 @@ private fun runCommonAnalysis(
} }
return analyzer return analyzer
} }
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -447,6 +448,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
if (platform.isCommon()) { if (platform.isCommon()) {
return CommonResolverForModuleFactory.analyzeFiles( return CommonResolverForModuleFactory.analyzeFiles(
files, moduleDescriptor.name, true, languageVersionSettings, files, moduleDescriptor.name, true, languageVersionSettings,
CommonPlatforms.defaultCommonPlatform,
mapOf( mapOf(
MODULE_FILES to files MODULE_FILES to files
) )
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.utils.assertIsDirectory
import org.jetbrains.kotlin.descriptors.commonizer.utils.assertModulesAreEqual import org.jetbrains.kotlin.descriptors.commonizer.utils.assertModulesAreEqual
import org.jetbrains.kotlin.descriptors.commonizer.utils.assertValidModule import org.jetbrains.kotlin.descriptors.commonizer.utils.assertValidModule
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.test.KotlinTestUtils.* import org.jetbrains.kotlin.test.KotlinTestUtils.*
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
@@ -123,7 +124,8 @@ abstract class AbstractCommonizationFromSourcesTest : KtUsefulTestCase() {
files = psiFiles, files = psiFiles,
moduleName = environment.moduleName, moduleName = environment.moduleName,
dependOnBuiltIns = true, dependOnBuiltIns = true,
languageVersionSettings = environment.configuration.languageVersionSettings languageVersionSettings = environment.configuration.languageVersionSettings,
targetPlatform = CommonPlatforms.defaultCommonPlatform
) { content -> ) { content ->
environment.createPackagePartProvider(content.moduleContentScope) environment.createPackagePartProvider(content.moduleContentScope)
}.moduleDescriptor }.moduleDescriptor