Move CompilerEnvironment from 'frontend' to 'cli'
This is needed in order to have a single convenient place where to register frontend services implemented _outside_ of the 'frontend' module, such as the control flow analysis, extracted to a separate module in a subsequent commit.
This commit is contained in:
committed by
Alexander Udalov
parent
3efbca85ea
commit
ca5a35b4b3
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.frontend.js.di
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.container.get
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
@@ -31,18 +30,22 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||
import org.jetbrains.kotlin.resolve.createContainer
|
||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||
|
||||
fun createTopDownAnalyzerForJs(
|
||||
moduleContext: ModuleContext,
|
||||
bindingTrace: BindingTrace,
|
||||
declarationProviderFactory: DeclarationProviderFactory,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
lookupTracker: LookupTracker,
|
||||
expectActualTracker: ExpectActualTracker,
|
||||
additionalPackages: List<PackageFragmentProvider>
|
||||
moduleContext: ModuleContext,
|
||||
bindingTrace: BindingTrace,
|
||||
declarationProviderFactory: DeclarationProviderFactory,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
lookupTracker: LookupTracker,
|
||||
expectActualTracker: ExpectActualTracker,
|
||||
additionalPackages: List<PackageFragmentProvider>,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
): LazyTopDownAnalyzer {
|
||||
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatformAnalyzerServices) {
|
||||
configureModule(
|
||||
@@ -57,8 +60,7 @@ fun createTopDownAnalyzerForJs(
|
||||
configureStandardResolveComponents()
|
||||
|
||||
useInstance(declarationProviderFactory)
|
||||
CompilerEnvironment.configure(this)
|
||||
|
||||
targetEnvironment.configure(this)
|
||||
}.apply {
|
||||
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
||||
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
||||
|
||||
@@ -46,6 +46,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
||||
configuration: CompilerConfiguration,
|
||||
moduleDescriptors: List<ModuleDescriptorImpl>,
|
||||
friendModuleDescriptors: List<ModuleDescriptorImpl>,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
thisIsBuiltInsModule: Boolean = false,
|
||||
customBuiltInsModule: ModuleDescriptorImpl? = null
|
||||
): JsAnalysisResult {
|
||||
@@ -81,7 +82,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
||||
|
||||
val trace = BindingTraceContext()
|
||||
trace.record(MODULE_KIND, context.module, moduleKind)
|
||||
return analyzeFilesWithGivenTrace(files, trace, context, configuration, additionalPackages)
|
||||
return analyzeFilesWithGivenTrace(files, trace, context, configuration, targetEnvironment, additionalPackages)
|
||||
}
|
||||
|
||||
protected abstract fun loadIncrementalCacheMetadata(
|
||||
@@ -96,6 +97,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
||||
trace: BindingTrace,
|
||||
moduleContext: ModuleContext,
|
||||
configuration: CompilerConfiguration,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
additionalPackages: List<PackageFragmentProvider> = emptyList()
|
||||
): JsAnalysisResult {
|
||||
val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: LookupTracker.DO_NOTHING
|
||||
@@ -110,7 +112,8 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
||||
languageVersionSettings,
|
||||
lookupTracker,
|
||||
expectActualTracker,
|
||||
additionalPackages + listOfNotNull(packageFragment)
|
||||
additionalPackages + listOfNotNull(packageFragment),
|
||||
targetEnvironment,
|
||||
)
|
||||
analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
|
||||
return JsAnalysisResult.success(trace, moduleContext.module)
|
||||
@@ -169,6 +172,8 @@ object TopDownAnalyzerFacadeForJS : AbstractTopDownAnalyzerFacadeForJS() {
|
||||
config: JsConfig
|
||||
): JsAnalysisResult {
|
||||
config.init()
|
||||
return analyzeFiles(files, config.project, config.configuration, config.moduleDescriptors, config.friendModuleDescriptors)
|
||||
return analyzeFiles(
|
||||
files, config.project, config.configuration, config.moduleDescriptors, config.friendModuleDescriptors, config.targetEnvironment,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker;
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration;
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment;
|
||||
import org.jetbrains.kotlin.serialization.js.*;
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.kotlin.utils.JsMetadataVersion;
|
||||
@@ -71,15 +72,22 @@ public class JsConfig {
|
||||
@Nullable
|
||||
private final Set<String> librariesToSkip;
|
||||
|
||||
public JsConfig(@NotNull Project project, @NotNull CompilerConfiguration configuration) {
|
||||
this(project, configuration, null, null);
|
||||
public final TargetEnvironment targetEnvironment;
|
||||
|
||||
public JsConfig(@NotNull Project project, @NotNull CompilerConfiguration configuration, @NotNull TargetEnvironment targetEnvironment) {
|
||||
this(project, configuration, targetEnvironment, null, null);
|
||||
}
|
||||
|
||||
public JsConfig(@NotNull Project project, @NotNull CompilerConfiguration configuration,
|
||||
public JsConfig(
|
||||
@NotNull Project project,
|
||||
@NotNull CompilerConfiguration configuration,
|
||||
@NotNull TargetEnvironment targetEnvironment,
|
||||
@Nullable List<JsModuleDescriptor<KotlinJavaScriptLibraryParts>> metadataCache,
|
||||
@Nullable Set<String> librariesToSkip) {
|
||||
@Nullable Set<String> librariesToSkip
|
||||
) {
|
||||
this.project = project;
|
||||
this.configuration = configuration.copy();
|
||||
this.targetEnvironment = targetEnvironment;
|
||||
this.metadataCache = metadataCache;
|
||||
this.librariesToSkip = librariesToSkip;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user