[Wasm] Add Wasm platform and K1 FE infrastructure

This commit is contained in:
Svyatoslav Kuzmich
2023-02-21 21:53:12 +01:00
parent fa4bbdf6d6
commit 54a45c49f8
28 changed files with 458 additions and 26 deletions
@@ -33,12 +33,10 @@ import org.jetbrains.kotlin.incremental.components.InlineConstTracker
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.BindingTrace
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.resolve.createContainer
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.platform.TargetPlatform
fun createContainerForJS(
moduleContext: ModuleContext,
@@ -51,12 +49,14 @@ fun createContainerForJS(
enumWhenTracker: EnumWhenTracker,
additionalPackages: List<PackageFragmentProvider>,
targetEnvironment: TargetEnvironment,
analyzerServices: PlatformDependentAnalyzerServices,
platform: TargetPlatform
): StorageComponentContainer {
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatformAnalyzerServices) {
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", analyzerServices) {
configureModule(
moduleContext,
JsPlatforms.defaultJsPlatform,
JsPlatformAnalyzerServices,
platform,
analyzerServices,
bindingTrace,
languageVersionSettings,
optimizingOptions = null,
@@ -93,6 +93,7 @@ fun createTopDownAnalyzerForJs(
): LazyTopDownAnalyzer {
return createContainerForJS(
moduleContext, bindingTrace, declarationProviderFactory, languageVersionSettings,
lookupTracker, expectActualTracker, inlineConstTracker, enumWhenTracker, additionalPackages, targetEnvironment
lookupTracker, expectActualTracker, inlineConstTracker, enumWhenTracker, additionalPackages, targetEnvironment,
JsPlatformAnalyzerServices, JsPlatforms.defaultJsPlatform
).get<LazyTopDownAnalyzer>()
}
@@ -6,9 +6,6 @@
package org.jetbrains.kotlin.js.analyze
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.search.DelegatingGlobalSearchScope
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
@@ -36,6 +33,7 @@ import org.jetbrains.kotlin.js.config.JsConfig
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
import org.jetbrains.kotlin.js.resolve.MODULE_KIND
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.*
@@ -45,9 +43,10 @@ import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.serialization.js.PackagesWithHeaderMetadata
import org.jetbrains.kotlin.utils.JsMetadataVersion
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
abstract class AbstractTopDownAnalyzerFacadeForJS {
abstract class AbstractTopDownAnalyzerFacadeForWeb {
abstract val analyzerServices: PlatformDependentAnalyzerServices
abstract val platform: TargetPlatform
fun analyzeFiles(
files: Collection<KtFile>,
@@ -74,7 +73,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
ProjectContext(project, "TopDownAnalyzer for JS"),
Name.special("<$moduleName>"),
builtIns,
platform = JsPlatforms.defaultJsPlatform
platform = platform
)
val additionalPackages = mutableListOf<PackageFragmentProvider>()
@@ -109,7 +108,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
configuration: CompilerConfiguration,
targetEnvironment: TargetEnvironment,
project: Project,
additionalPackages: List<PackageFragmentProvider> = emptyList()
additionalPackages: List<PackageFragmentProvider> = emptyList(),
): JsAnalysisResult {
val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: LookupTracker.DO_NOTHING
val expectActualTracker = configuration.get(CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER) ?: ExpectActualTracker.DoNothing
@@ -130,6 +129,8 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
enumWhenTracker,
additionalPackages + listOfNotNull(packageFragment),
targetEnvironment,
analyzerServices,
platform
)
val analysisHandlerExtensions = AnalysisHandlerExtension.getInstances(project)
@@ -193,7 +194,10 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
}
}
object TopDownAnalyzerFacadeForJS : AbstractTopDownAnalyzerFacadeForJS() {
object TopDownAnalyzerFacadeForJS : AbstractTopDownAnalyzerFacadeForWeb() {
override val analyzerServices: PlatformDependentAnalyzerServices = JsPlatformAnalyzerServices
override val platform: TargetPlatform = JsPlatforms.defaultJsPlatform
override fun loadIncrementalCacheMetadata(
incrementalData: IncrementalDataProvider,