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.load.kotlin.MetadataFinderFactory
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.*
@@ -66,19 +65,17 @@ class CommonResolverForModuleFactory(
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>,
private val dependencies: Iterable<ModuleInfo>,
override val expectedBy: List<ModuleInfo>,
override val platform: TargetPlatform,
private val modulesWhoseInternalsAreVisible: Collection<ModuleInfo>,
private val dependOnOldBuiltIns: Boolean
) : 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 dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns =
if (dependOnOldBuiltIns) ModuleInfo.DependencyOnBuiltIns.LAST else ModuleInfo.DependencyOnBuiltIns.NONE
override val platform: TargetPlatform
get() = CommonPlatforms.defaultCommonPlatform
override val analyzerServices: PlatformDependentAnalyzerServices
get() = CommonPlatformAnalyzerServices
}
@@ -98,11 +95,11 @@ class CommonResolverForModuleFactory(
moduleInfo
)
val metadataPartProvider = (platformParameters as CommonAnalysisParameters).metadataPartProviderFactory(moduleContent)
val metadataPartProvider = platformParameters.metadataPartProviderFactory(moduleContent)
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
val container = createContainerToResolveCommonCode(
moduleContext, trace, declarationProviderFactory, moduleContentScope, targetEnvironment, metadataPartProvider,
languageVersionSettings, CommonPlatforms.defaultCommonPlatform, CommonPlatformAnalyzerServices, shouldCheckExpectActual
languageVersionSettings, targetPlatform, CommonPlatformAnalyzerServices, shouldCheckExpectActual
)
val packageFragmentProviders =
@@ -119,6 +116,7 @@ class CommonResolverForModuleFactory(
companion object {
fun analyzeFiles(
files: Collection<KtFile>, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings,
targetPlatform: TargetPlatform,
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap(),
dependenciesContainer: CommonDependenciesContainer? = null,
metadataPartProviderFactory: (ModuleContent<ModuleInfo>) -> MetadataPartProvider
@@ -128,6 +126,7 @@ class CommonResolverForModuleFactory(
capabilities,
dependenciesContainer?.moduleInfos?.toList().orEmpty(),
dependenciesContainer?.refinesModuleInfos.orEmpty(),
targetPlatform,
dependenciesContainer?.friendModuleInfos.orEmpty(),
dependOnBuiltIns
)
@@ -142,7 +141,7 @@ class CommonResolverForModuleFactory(
val resolverForModuleFactory = CommonResolverForModuleFactory(
CommonAnalysisParameters(metadataPartProviderFactory),
CompilerEnvironment,
CommonPlatforms.defaultCommonPlatform,
targetPlatform,
shouldCheckExpectActual = false,
dependenciesContainer
)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import java.io.File
internal val KotlinCoreEnvironment.destDir: File?
@@ -49,6 +50,7 @@ private fun runCommonAnalysis(
analyzer.analyzeAndReport(files) {
CommonResolverForModuleFactory.analyzeFiles(
files, moduleName, dependOnBuiltins, configuration.languageVersionSettings,
CommonPlatforms.defaultCommonPlatform,
dependenciesContainer = dependencyContainer
) { content ->
environment.createPackagePartProvider(content.moduleContentScope)
@@ -56,4 +58,4 @@ private fun runCommonAnalysis(
}
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.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile
@@ -447,6 +448,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
if (platform.isCommon()) {
return CommonResolverForModuleFactory.analyzeFiles(
files, moduleDescriptor.name, true, languageVersionSettings,
CommonPlatforms.defaultCommonPlatform,
mapOf(
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.assertValidModule
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.test.KotlinTestUtils.*
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
@@ -123,7 +124,8 @@ abstract class AbstractCommonizationFromSourcesTest : KtUsefulTestCase() {
files = psiFiles,
moduleName = environment.moduleName,
dependOnBuiltIns = true,
languageVersionSettings = environment.configuration.languageVersionSettings
languageVersionSettings = environment.configuration.languageVersionSettings,
targetPlatform = CommonPlatforms.defaultCommonPlatform
) { content ->
environment.createPackagePartProvider(content.moduleContentScope)
}.moduleDescriptor