[Wasm] Add Wasm platform and K1 FE infrastructure
This commit is contained in:
@@ -19,7 +19,6 @@ dependencies {
|
|||||||
api(project(":analysis:symbol-light-classes"))
|
api(project(":analysis:symbol-light-classes"))
|
||||||
api(project(":analysis:decompiled:light-classes-for-decompiled"))
|
api(project(":analysis:decompiled:light-classes-for-decompiled"))
|
||||||
api(project(":analysis:analysis-api-standalone:analysis-api-standalone-base"))
|
api(project(":analysis:analysis-api-standalone:analysis-api-standalone-base"))
|
||||||
|
|
||||||
testApi(projectTests(":analysis:analysis-test-framework"))
|
testApi(projectTests(":analysis:analysis-test-framework"))
|
||||||
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
||||||
testApi(projectTests(":analysis:analysis-api-fir"))
|
testApi(projectTests(":analysis:analysis-api-fir"))
|
||||||
|
|||||||
+3
@@ -31,9 +31,11 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
|||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||||
|
import org.jetbrains.kotlin.wasm.resolve.WasmPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
import org.jetbrains.kotlin.platform.isCommon
|
||||||
import org.jetbrains.kotlin.platform.isJs
|
import org.jetbrains.kotlin.platform.isJs
|
||||||
|
import org.jetbrains.kotlin.platform.isWasm
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.platform.konan.isNative
|
import org.jetbrains.kotlin.platform.konan.isNative
|
||||||
@@ -49,6 +51,7 @@ internal fun TargetPlatform.getAnalyzerServices(): PlatformDependentAnalyzerServ
|
|||||||
return when {
|
return when {
|
||||||
isJvm() -> JvmPlatformAnalyzerServices
|
isJvm() -> JvmPlatformAnalyzerServices
|
||||||
isJs() -> JsPlatformAnalyzerServices
|
isJs() -> JsPlatformAnalyzerServices
|
||||||
|
isWasm() -> WasmPlatformAnalyzerServices
|
||||||
isNative() -> NativePlatformAnalyzerServices
|
isNative() -> NativePlatformAnalyzerServices
|
||||||
isCommon() -> CommonPlatformAnalyzerServices
|
isCommon() -> CommonPlatformAnalyzerServices
|
||||||
else -> error("Unknown target platform: $this")
|
else -> error("Unknown target platform: $this")
|
||||||
|
|||||||
@@ -219,6 +219,8 @@ val fe10CompilerModules = arrayOf(
|
|||||||
":js:js.dce",
|
":js:js.dce",
|
||||||
":native:frontend.native",
|
":native:frontend.native",
|
||||||
":native:kotlin-native-utils",
|
":native:kotlin-native-utils",
|
||||||
|
":wasm:wasm.frontend",
|
||||||
|
":wasm:wasm.config",
|
||||||
":kotlin-build-common",
|
":kotlin-build-common",
|
||||||
":compiler:backend.common.jvm",
|
":compiler:backend.common.jvm",
|
||||||
":analysis:decompiled:light-classes-for-decompiled-fe10",
|
":analysis:decompiled:light-classes-for-decompiled-fe10",
|
||||||
@@ -667,6 +669,7 @@ tasks {
|
|||||||
|
|
||||||
register("wasmCompilerTest") {
|
register("wasmCompilerTest") {
|
||||||
dependsOn(":wasm:wasm.tests:test")
|
dependsOn(":wasm:wasm.tests:test")
|
||||||
|
dependsOn(":wasm:wasm.tests:diagnosticsTest")
|
||||||
// Windows WABT release requires Visual C++ Redistributable
|
// Windows WABT release requires Visual C++ Redistributable
|
||||||
if (!kotlinBuildProperties.isTeamcityBuild || !org.gradle.internal.os.OperatingSystem.current().isWindows) {
|
if (!kotlinBuildProperties.isTeamcityBuild || !org.gradle.internal.os.OperatingSystem.current().isWindows) {
|
||||||
dependsOn(":wasm:wasm.ir:test")
|
dependsOn(":wasm:wasm.ir:test")
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ dependencies {
|
|||||||
api(project(":compiler:javac-wrapper"))
|
api(project(":compiler:javac-wrapper"))
|
||||||
api(project(":js:js.translator"))
|
api(project(":js:js.translator"))
|
||||||
api(project(":native:frontend.native"))
|
api(project(":native:frontend.native"))
|
||||||
|
api(project(":wasm:wasm.frontend"))
|
||||||
api(commonDependency("org.fusesource.jansi", "jansi"))
|
api(commonDependency("org.fusesource.jansi", "jansi"))
|
||||||
api(project(":compiler:fir:raw-fir:psi2fir"))
|
api(project(":compiler:fir:raw-fir:psi2fir"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:resolve"))
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ dependencies {
|
|||||||
api(project(":js:js.serializer"))
|
api(project(":js:js.serializer"))
|
||||||
api(project(":js:js.dce"))
|
api(project(":js:js.dce"))
|
||||||
api(project(":js:js.sourcemap"))
|
api(project(":js:js.sourcemap"))
|
||||||
|
api(project(":wasm:wasm.frontend"))
|
||||||
|
api(project(":wasm:wasm.config"))
|
||||||
|
|
||||||
compileOnly(intellijCore())
|
compileOnly(intellijCore())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
||||||
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
|
||||||
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
|
||||||
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
|
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
@@ -427,7 +429,8 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
environmentForJS.configuration,
|
environmentForJS.configuration,
|
||||||
libraries,
|
libraries,
|
||||||
friendLibraries,
|
friendLibraries,
|
||||||
AnalyzerWithCompilerReport(environmentForJS.configuration)
|
AnalyzerWithCompilerReport(environmentForJS.configuration),
|
||||||
|
analyzerFacade = if (arguments.wasm) TopDownAnalyzerFacadeForWasm else TopDownAnalyzerFacadeForJSIR
|
||||||
)
|
)
|
||||||
val result = sourceModule.jsFrontEndResult.jsAnalysisResult
|
val result = sourceModule.jsFrontEndResult.jsAnalysisResult
|
||||||
if (result is JsAnalysisResult.RetryWithAdditionalRoots) {
|
if (result is JsAnalysisResult.RetryWithAdditionalRoots) {
|
||||||
|
|||||||
+9
-2
@@ -11,11 +11,18 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
|||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||||
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForJS
|
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
|
||||||
|
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||||
|
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||||
|
|
||||||
// TODO: put it in separated module `frontend.js`
|
// TODO: put it in separated module `frontend.js`
|
||||||
object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForJS() {
|
object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForWeb() {
|
||||||
|
override val analyzerServices: PlatformDependentAnalyzerServices = JsPlatformAnalyzerServices
|
||||||
|
override val platform: TargetPlatform = JsPlatforms.defaultJsPlatform
|
||||||
|
|
||||||
override fun loadIncrementalCacheMetadata(
|
override fun loadIncrementalCacheMetadata(
|
||||||
incrementalData: IncrementalDataProvider,
|
incrementalData: IncrementalDataProvider,
|
||||||
moduleContext: ModuleContext,
|
moduleContext: ModuleContext,
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.cli.js.klib
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
|
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
||||||
|
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||||
|
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||||
|
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||||
|
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||||
|
import org.jetbrains.kotlin.wasm.resolve.WasmPlatformAnalyzerServices
|
||||||
|
|
||||||
|
object TopDownAnalyzerFacadeForWasm : AbstractTopDownAnalyzerFacadeForWeb() {
|
||||||
|
override val analyzerServices: PlatformDependentAnalyzerServices = WasmPlatformAnalyzerServices
|
||||||
|
override val platform: TargetPlatform = WasmPlatforms.Default
|
||||||
|
|
||||||
|
override fun loadIncrementalCacheMetadata(
|
||||||
|
incrementalData: IncrementalDataProvider,
|
||||||
|
moduleContext: ModuleContext,
|
||||||
|
lookupTracker: LookupTracker,
|
||||||
|
languageVersionSettings: LanguageVersionSettings
|
||||||
|
): PackageFragmentProvider {
|
||||||
|
return JsFactories.DefaultDeserializedDescriptorFactory.createCachedPackageFragmentProvider(
|
||||||
|
incrementalData.compiledPackageParts.values.map { it.metadata },
|
||||||
|
moduleContext.storageManager,
|
||||||
|
moduleContext.module,
|
||||||
|
CompilerDeserializationConfiguration(languageVersionSettings),
|
||||||
|
lookupTracker
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-1
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
|
||||||
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
|
||||||
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -21,10 +22,11 @@ fun prepareAnalyzedSourceModule(
|
|||||||
friendDependencies: List<String>,
|
friendDependencies: List<String>,
|
||||||
analyzer: AbstractAnalyzerWithCompilerReport,
|
analyzer: AbstractAnalyzerWithCompilerReport,
|
||||||
errorPolicy: ErrorTolerancePolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT,
|
errorPolicy: ErrorTolerancePolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT,
|
||||||
|
analyzerFacade: AbstractTopDownAnalyzerFacadeForWeb = TopDownAnalyzerFacadeForJSIR,
|
||||||
): ModulesStructure {
|
): ModulesStructure {
|
||||||
val mainModule = MainModule.SourceFiles(files)
|
val mainModule = MainModule.SourceFiles(files)
|
||||||
val sourceModule = ModulesStructure(project, mainModule, configuration, dependencies, friendDependencies)
|
val sourceModule = ModulesStructure(project, mainModule, configuration, dependencies, friendDependencies)
|
||||||
return sourceModule.apply {
|
return sourceModule.apply {
|
||||||
runAnalysis(errorPolicy, analyzer, TopDownAnalyzerFacadeForJSIR)
|
runAnalysis(errorPolicy, analyzer, analyzerFacade)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
@@ -2,3 +2,4 @@
|
|||||||
org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm
|
org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm
|
||||||
org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs
|
org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs
|
||||||
org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
|
org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
|
||||||
|
org.jetbrains.kotlin.wasm.resolve.diagnostics.DefaultErrorMessagesWasm
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ public enum EnvironmentConfigFiles {
|
|||||||
JVM_CONFIG_FILES,
|
JVM_CONFIG_FILES,
|
||||||
JS_CONFIG_FILES,
|
JS_CONFIG_FILES,
|
||||||
NATIVE_CONFIG_FILES,
|
NATIVE_CONFIG_FILES,
|
||||||
|
WASM_CONFIG_FILES,
|
||||||
METADATA_CONFIG_FILES,
|
METADATA_CONFIG_FILES,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForJS
|
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
|
||||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
|
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
|
||||||
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
@@ -506,7 +506,7 @@ class ModulesStructure(
|
|||||||
fun runAnalysis(
|
fun runAnalysis(
|
||||||
errorPolicy: ErrorTolerancePolicy,
|
errorPolicy: ErrorTolerancePolicy,
|
||||||
analyzer: AbstractAnalyzerWithCompilerReport,
|
analyzer: AbstractAnalyzerWithCompilerReport,
|
||||||
analyzerFacade: AbstractTopDownAnalyzerFacadeForJS
|
analyzerFacade: AbstractTopDownAnalyzerFacadeForWeb
|
||||||
) {
|
) {
|
||||||
require(mainModule is MainModule.SourceFiles)
|
require(mainModule is MainModule.SourceFiles)
|
||||||
val files = mainModule.files
|
val files = mainModule.files
|
||||||
|
|||||||
+44
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||||
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
|
||||||
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
|
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
|
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
|
||||||
@@ -51,6 +52,7 @@ import org.jetbrains.kotlin.platform.CommonPlatforms
|
|||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
import org.jetbrains.kotlin.platform.isCommon
|
||||||
import org.jetbrains.kotlin.platform.isJs
|
import org.jetbrains.kotlin.platform.isJs
|
||||||
|
import org.jetbrains.kotlin.platform.isWasm
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.platform.konan.isNative
|
import org.jetbrains.kotlin.platform.konan.isNative
|
||||||
@@ -65,6 +67,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProvid
|
|||||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.MultiplatformDiagnosticsDirectives.ENABLE_MULTIPLATFORM_COMPOSITE_ANALYSIS_MODE
|
import org.jetbrains.kotlin.test.directives.MultiplatformDiagnosticsDirectives.ENABLE_MULTIPLATFORM_COMPOSITE_ANALYSIS_MODE
|
||||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
@@ -73,6 +76,7 @@ import org.jetbrains.kotlin.test.model.FrontendKinds
|
|||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.util.KtTestUtil
|
import org.jetbrains.kotlin.test.util.KtTestUtil
|
||||||
import org.jetbrains.kotlin.types.typeUtil.closure
|
import org.jetbrains.kotlin.types.typeUtil.closure
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
@@ -159,6 +163,9 @@ class ClassicFrontendFacade(
|
|||||||
module, project, configuration, compilerEnvironment, files, dependencyDescriptors, friendsDescriptors
|
module, project, configuration, compilerEnvironment, files, dependencyDescriptors, friendsDescriptors
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
targetPlatform.isWasm() -> performWasmModuleResolve(
|
||||||
|
module, project, configuration, compilerEnvironment, files, dependencyDescriptors, friendsDescriptors
|
||||||
|
)
|
||||||
targetPlatform.isNative() -> performNativeModuleResolve(
|
targetPlatform.isNative() -> performNativeModuleResolve(
|
||||||
module, project, compilerEnvironment, files, dependencyDescriptors, friendsDescriptors, dependsOnDescriptors
|
module, project, compilerEnvironment, files, dependencyDescriptors, friendsDescriptors, dependsOnDescriptors
|
||||||
)
|
)
|
||||||
@@ -331,6 +338,43 @@ class ClassicFrontendFacade(
|
|||||||
return analyzer.analysisResult
|
return analyzer.analysisResult
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun performWasmModuleResolve(
|
||||||
|
module: TestModule,
|
||||||
|
project: Project,
|
||||||
|
configuration: CompilerConfiguration,
|
||||||
|
compilerEnvironment: TargetEnvironment,
|
||||||
|
files: List<KtFile>,
|
||||||
|
dependencyDescriptors: List<ModuleDescriptor>,
|
||||||
|
friendsDescriptors: List<ModuleDescriptor>,
|
||||||
|
): AnalysisResult {
|
||||||
|
val needsKotlinTest = ConfigurationDirectives.WITH_STDLIB in module.directives
|
||||||
|
|
||||||
|
val runtimeKlibsNames =
|
||||||
|
listOfNotNull(
|
||||||
|
System.getProperty("kotlin.wasm.stdlib.path")!!,
|
||||||
|
System.getProperty("kotlin.wasm.kotlin.test.path")!!.takeIf { needsKotlinTest }
|
||||||
|
).map {
|
||||||
|
File(it).absolutePath
|
||||||
|
}
|
||||||
|
|
||||||
|
val runtimeKlibs = loadKlib(runtimeKlibsNames, configuration)
|
||||||
|
val transitiveLibraries = WasmEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.RegularDependency)
|
||||||
|
val friendLibraries = WasmEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.FriendDependency)
|
||||||
|
val allDependencies = runtimeKlibs + dependencyDescriptors + friendLibraries + friendsDescriptors + transitiveLibraries
|
||||||
|
|
||||||
|
val builtInModuleDescriptor = allDependencies.firstNotNullOfOrNull { it.builtIns }?.builtInsModule
|
||||||
|
return TopDownAnalyzerFacadeForWasm.analyzeFiles(
|
||||||
|
files,
|
||||||
|
project,
|
||||||
|
configuration,
|
||||||
|
allDependencies,
|
||||||
|
friendsDescriptors + friendLibraries,
|
||||||
|
compilerEnvironment,
|
||||||
|
thisIsBuiltInsModule = builtInModuleDescriptor == null,
|
||||||
|
customBuiltInsModule = builtInModuleDescriptor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun performNativeModuleResolve(
|
private fun performNativeModuleResolve(
|
||||||
module: TestModule,
|
module: TestModule,
|
||||||
project: Project,
|
project: Project,
|
||||||
|
|||||||
+2
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
|||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
import org.jetbrains.kotlin.platform.isCommon
|
||||||
import org.jetbrains.kotlin.platform.isJs
|
import org.jetbrains.kotlin.platform.isJs
|
||||||
|
import org.jetbrains.kotlin.platform.isWasm
|
||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.platform.konan.isNative
|
import org.jetbrains.kotlin.platform.konan.isNative
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -117,6 +118,7 @@ fun TargetPlatform.platformToEnvironmentConfigFiles() = when {
|
|||||||
isJvm() -> EnvironmentConfigFiles.JVM_CONFIG_FILES
|
isJvm() -> EnvironmentConfigFiles.JVM_CONFIG_FILES
|
||||||
isJs() -> EnvironmentConfigFiles.JS_CONFIG_FILES
|
isJs() -> EnvironmentConfigFiles.JS_CONFIG_FILES
|
||||||
isNative() -> EnvironmentConfigFiles.NATIVE_CONFIG_FILES
|
isNative() -> EnvironmentConfigFiles.NATIVE_CONFIG_FILES
|
||||||
|
isWasm() -> EnvironmentConfigFiles.WASM_CONFIG_FILES
|
||||||
// TODO: is it correct?
|
// TODO: is it correct?
|
||||||
isCommon() -> EnvironmentConfigFiles.METADATA_CONFIG_FILES
|
isCommon() -> EnvironmentConfigFiles.METADATA_CONFIG_FILES
|
||||||
else -> error("Unknown platform: ${this}")
|
else -> error("Unknown platform: ${this}")
|
||||||
|
|||||||
+98
@@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.test.services.configuration
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.AnalysisFlag
|
||||||
|
import org.jetbrains.kotlin.config.AnalysisFlags.allowFullyQualifiedNameInKClass
|
||||||
|
import org.jetbrains.kotlin.config.AnalysisFlags.skipPrereleaseCheck
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding
|
||||||
|
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.EXPECT_ACTUAL_LINKER
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.GENERATE_INLINE_ANONYMOUS_FUNCTIONS
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.NO_INLINE
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.PROPERTY_LAZY_INITIALIZATION
|
||||||
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.SOURCE_MAP_EMBED_SOURCES
|
||||||
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
|
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
import org.jetbrains.kotlin.test.services.*
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
class WasmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
||||||
|
override val directiveContainers: List<DirectivesContainer>
|
||||||
|
get() = listOf(JsEnvironmentConfigurationDirectives)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private fun getKlibDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<File> {
|
||||||
|
val visited = mutableSetOf<TestModule>()
|
||||||
|
fun getRecursive(module: TestModule, relation: DependencyRelation) {
|
||||||
|
val dependencies = if (relation == DependencyRelation.FriendDependency) {
|
||||||
|
module.friendDependencies
|
||||||
|
} else {
|
||||||
|
module.regularDependencies
|
||||||
|
}
|
||||||
|
dependencies
|
||||||
|
// See: `dependencyKind =` in AbstractJsBlackBoxCodegenTestBase.kt
|
||||||
|
.filter { it.kind != DependencyKind.Source }
|
||||||
|
.map { testServices.dependencyProvider.getTestModule(it.moduleName) }.forEach {
|
||||||
|
if (it !in visited) {
|
||||||
|
visited += it
|
||||||
|
getRecursive(it, relation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getRecursive(module, kind)
|
||||||
|
return visited.map { testServices.dependencyProvider.getArtifact(it, ArtifactKinds.KLib).outputFile }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<ModuleDescriptor> {
|
||||||
|
return getKlibDependencies(module, testServices, kind)
|
||||||
|
.map { testServices.jsLibraryProvider.getDescriptorByPath(it.absolutePath) }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun provideAdditionalAnalysisFlags(
|
||||||
|
directives: RegisteredDirectives,
|
||||||
|
languageVersion: LanguageVersion
|
||||||
|
): Map<AnalysisFlag<*>, Any?> {
|
||||||
|
return super.provideAdditionalAnalysisFlags(directives, languageVersion).toMutableMap().also {
|
||||||
|
it[allowFullyQualifiedNameInKClass] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun DirectiveToConfigurationKeyExtractor.provideConfigurationKeys() {
|
||||||
|
register(PROPERTY_LAZY_INITIALIZATION, JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {
|
||||||
|
val registeredDirectives = module.directives
|
||||||
|
configuration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.ES)
|
||||||
|
|
||||||
|
val noInline = registeredDirectives.contains(NO_INLINE)
|
||||||
|
configuration.put(CommonConfigurationKeys.DISABLE_INLINE, noInline)
|
||||||
|
configuration.put(CommonConfigurationKeys.MODULE_NAME, module.name)
|
||||||
|
|
||||||
|
val sourceDirs = module.files.map { it.originalFile.parent }.distinct()
|
||||||
|
configuration.put(JSConfigurationKeys.SOURCE_MAP_SOURCE_ROOTS, sourceDirs)
|
||||||
|
configuration.put(JSConfigurationKeys.SOURCE_MAP, true)
|
||||||
|
|
||||||
|
val sourceMapSourceEmbedding = registeredDirectives[SOURCE_MAP_EMBED_SOURCES].singleOrNull() ?: SourceMapSourceEmbedding.NEVER
|
||||||
|
configuration.put(JSConfigurationKeys.SOURCE_MAP_EMBED_SOURCES, sourceMapSourceEmbedding)
|
||||||
|
|
||||||
|
configuration.put(CommonConfigurationKeys.EXPECT_ACTUAL_LINKER, EXPECT_ACTUAL_LINKER in registeredDirectives)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.platform
|
||||||
|
|
||||||
|
object WasmPlatform : SimplePlatform("Wasm") {
|
||||||
|
override val oldFashionedDescription: String
|
||||||
|
get() = "Wasm "
|
||||||
|
}
|
||||||
|
|
||||||
|
fun TargetPlatform?.isWasm(): Boolean = this?.singleOrNull() is WasmPlatform
|
||||||
@@ -33,12 +33,10 @@ import org.jetbrains.kotlin.incremental.components.InlineConstTracker
|
|||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.*
|
||||||
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.KotlinCodeAnalyzer
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
|
||||||
fun createContainerForJS(
|
fun createContainerForJS(
|
||||||
moduleContext: ModuleContext,
|
moduleContext: ModuleContext,
|
||||||
@@ -51,12 +49,14 @@ fun createContainerForJS(
|
|||||||
enumWhenTracker: EnumWhenTracker,
|
enumWhenTracker: EnumWhenTracker,
|
||||||
additionalPackages: List<PackageFragmentProvider>,
|
additionalPackages: List<PackageFragmentProvider>,
|
||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment,
|
||||||
|
analyzerServices: PlatformDependentAnalyzerServices,
|
||||||
|
platform: TargetPlatform
|
||||||
): StorageComponentContainer {
|
): StorageComponentContainer {
|
||||||
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatformAnalyzerServices) {
|
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", analyzerServices) {
|
||||||
configureModule(
|
configureModule(
|
||||||
moduleContext,
|
moduleContext,
|
||||||
JsPlatforms.defaultJsPlatform,
|
platform,
|
||||||
JsPlatformAnalyzerServices,
|
analyzerServices,
|
||||||
bindingTrace,
|
bindingTrace,
|
||||||
languageVersionSettings,
|
languageVersionSettings,
|
||||||
optimizingOptions = null,
|
optimizingOptions = null,
|
||||||
@@ -93,6 +93,7 @@ fun createTopDownAnalyzerForJs(
|
|||||||
): LazyTopDownAnalyzer {
|
): LazyTopDownAnalyzer {
|
||||||
return createContainerForJS(
|
return createContainerForJS(
|
||||||
moduleContext, bindingTrace, declarationProviderFactory, languageVersionSettings,
|
moduleContext, bindingTrace, declarationProviderFactory, languageVersionSettings,
|
||||||
lookupTracker, expectActualTracker, inlineConstTracker, enumWhenTracker, additionalPackages, targetEnvironment
|
lookupTracker, expectActualTracker, inlineConstTracker, enumWhenTracker, additionalPackages, targetEnvironment,
|
||||||
|
JsPlatformAnalyzerServices, JsPlatforms.defaultJsPlatform
|
||||||
).get<LazyTopDownAnalyzer>()
|
).get<LazyTopDownAnalyzer>()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.js.analyze
|
package org.jetbrains.kotlin.js.analyze
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
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.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
|
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.JsPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.js.resolve.MODULE_KIND
|
import org.jetbrains.kotlin.js.resolve.MODULE_KIND
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.*
|
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.ModuleKind
|
||||||
import org.jetbrains.kotlin.serialization.js.PackagesWithHeaderMetadata
|
import org.jetbrains.kotlin.serialization.js.PackagesWithHeaderMetadata
|
||||||
import org.jetbrains.kotlin.utils.JsMetadataVersion
|
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(
|
fun analyzeFiles(
|
||||||
files: Collection<KtFile>,
|
files: Collection<KtFile>,
|
||||||
@@ -74,7 +73,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
|||||||
ProjectContext(project, "TopDownAnalyzer for JS"),
|
ProjectContext(project, "TopDownAnalyzer for JS"),
|
||||||
Name.special("<$moduleName>"),
|
Name.special("<$moduleName>"),
|
||||||
builtIns,
|
builtIns,
|
||||||
platform = JsPlatforms.defaultJsPlatform
|
platform = platform
|
||||||
)
|
)
|
||||||
|
|
||||||
val additionalPackages = mutableListOf<PackageFragmentProvider>()
|
val additionalPackages = mutableListOf<PackageFragmentProvider>()
|
||||||
@@ -109,7 +108,7 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
|||||||
configuration: CompilerConfiguration,
|
configuration: CompilerConfiguration,
|
||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment,
|
||||||
project: Project,
|
project: Project,
|
||||||
additionalPackages: List<PackageFragmentProvider> = emptyList()
|
additionalPackages: List<PackageFragmentProvider> = emptyList(),
|
||||||
): JsAnalysisResult {
|
): JsAnalysisResult {
|
||||||
val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: LookupTracker.DO_NOTHING
|
val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: LookupTracker.DO_NOTHING
|
||||||
val expectActualTracker = configuration.get(CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER) ?: ExpectActualTracker.DoNothing
|
val expectActualTracker = configuration.get(CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER) ?: ExpectActualTracker.DoNothing
|
||||||
@@ -130,6 +129,8 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
|
|||||||
enumWhenTracker,
|
enumWhenTracker,
|
||||||
additionalPackages + listOfNotNull(packageFragment),
|
additionalPackages + listOfNotNull(packageFragment),
|
||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
|
analyzerServices,
|
||||||
|
platform
|
||||||
)
|
)
|
||||||
|
|
||||||
val analysisHandlerExtensions = AnalysisHandlerExtension.getInstances(project)
|
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(
|
override fun loadIncrementalCacheMetadata(
|
||||||
incrementalData: IncrementalDataProvider,
|
incrementalData: IncrementalDataProvider,
|
||||||
|
|||||||
@@ -253,6 +253,8 @@ include ":kotlin-imports-dumper-compiler-plugin",
|
|||||||
":test-instrumenter",
|
":test-instrumenter",
|
||||||
":wasm:wasm.ir",
|
":wasm:wasm.ir",
|
||||||
":wasm:wasm.tests",
|
":wasm:wasm.tests",
|
||||||
|
":wasm:wasm.frontend",
|
||||||
|
":wasm:wasm.config",
|
||||||
":repo:codebase-tests"
|
":repo:codebase-tests"
|
||||||
|
|
||||||
include ":kotlinx-atomicfu-compiler-plugin",
|
include ":kotlinx-atomicfu-compiler-plugin",
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
id("jps-compatible")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(":compiler:config"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.platform.wasm
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
import org.jetbrains.kotlin.platform.WasmPlatform
|
||||||
|
|
||||||
|
object WasmPlatforms {
|
||||||
|
object Default : TargetPlatform(setOf(WasmPlatform))
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
id("jps-compatible")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(":compiler:util"))
|
||||||
|
api(project(":compiler:frontend"))
|
||||||
|
api(project(":js:js.frontend"))
|
||||||
|
compileOnly(intellijCore())
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
"test" {}
|
||||||
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.wasm.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.resolve.*
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
|
object WasmPlatformAnalyzerServices : PlatformDependentAnalyzerServices() {
|
||||||
|
override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList<ImportPath>) {
|
||||||
|
result.add(ImportPath.fromString("kotlin.js.*"))
|
||||||
|
}
|
||||||
|
|
||||||
|
override val platformConfigurator: PlatformConfigurator = WasmPlatformConfigurator
|
||||||
|
|
||||||
|
val builtIns: KotlinBuiltIns
|
||||||
|
get() = DefaultBuiltIns.Instance
|
||||||
|
|
||||||
|
override val excludedImports: List<FqName> =
|
||||||
|
listOf("Promise", "Date", "Console", "Math", "RegExp", "RegExpMatch", "Json", "json").map { FqName("kotlin.js.$it") }
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.wasm.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||||
|
import org.jetbrains.kotlin.container.useImpl
|
||||||
|
import org.jetbrains.kotlin.container.useInstance
|
||||||
|
import org.jetbrains.kotlin.js.analyze.JsNativeDiagnosticSuppressor
|
||||||
|
import org.jetbrains.kotlin.js.naming.NameSuggestion
|
||||||
|
import org.jetbrains.kotlin.js.resolve.ExtensionFunctionToExternalIsInlinable
|
||||||
|
import org.jetbrains.kotlin.js.resolve.diagnostics.*
|
||||||
|
import org.jetbrains.kotlin.resolve.PlatformConfiguratorBase
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.checkers.LateinitIntrinsicApplicabilityChecker
|
||||||
|
import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker
|
||||||
|
import org.jetbrains.kotlin.wasm.resolve.diagnostics.WasmExternalInheritanceChecker
|
||||||
|
|
||||||
|
// TODO: Review the list of used K/JS checkers.
|
||||||
|
// Refactor useful checkers into common module.
|
||||||
|
object WasmPlatformConfigurator : PlatformConfiguratorBase(
|
||||||
|
additionalDeclarationCheckers = listOf(
|
||||||
|
JsNameChecker, JsModuleChecker, JsExternalFileChecker,
|
||||||
|
JsExternalChecker, WasmExternalInheritanceChecker,
|
||||||
|
JsRuntimeAnnotationChecker,
|
||||||
|
JsExportAnnotationChecker,
|
||||||
|
JsExportDeclarationChecker,
|
||||||
|
),
|
||||||
|
additionalCallCheckers = listOf(
|
||||||
|
JsModuleCallChecker,
|
||||||
|
JsDefinedExternallyCallChecker,
|
||||||
|
LateinitIntrinsicApplicabilityChecker(isWarningInPre19 = true)
|
||||||
|
),
|
||||||
|
) {
|
||||||
|
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||||
|
container.useInstance(NameSuggestion())
|
||||||
|
container.useImpl<JsCallChecker>()
|
||||||
|
container.useImpl<JsNameClashChecker>()
|
||||||
|
container.useImpl<JsNameCharsChecker>()
|
||||||
|
container.useInstance(JsModuleClassLiteralChecker)
|
||||||
|
container.useImpl<JsReflectionAPICallChecker>()
|
||||||
|
container.useImpl<JsNativeRttiChecker>()
|
||||||
|
container.useImpl<JsReifiedNativeChecker>()
|
||||||
|
container.useInstance(ExtensionFunctionToExternalIsInlinable)
|
||||||
|
container.useInstance(JsQualifierChecker)
|
||||||
|
container.useInstance(JsNativeDiagnosticSuppressor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun configureModuleDependentCheckers(container: StorageComponentContainer) {
|
||||||
|
super.configureModuleDependentCheckers(container)
|
||||||
|
container.useImpl<ExpectedActualDeclarationChecker>()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ plugins {
|
|||||||
dependencies {
|
dependencies {
|
||||||
testApi(commonDependency("junit:junit"))
|
testApi(commonDependency("junit:junit"))
|
||||||
testApi(projectTests(":compiler:tests-common"))
|
testApi(projectTests(":compiler:tests-common"))
|
||||||
|
testApi(projectTests(":compiler:tests-common-new"))
|
||||||
testApi(intellijCore())
|
testApi(intellijCore())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,9 +131,23 @@ val generateTests by generator("org.jetbrains.kotlin.generators.tests.GenerateWa
|
|||||||
|
|
||||||
projectTest(parallel = true) {
|
projectTest(parallel = true) {
|
||||||
workingDir = rootDir
|
workingDir = rootDir
|
||||||
|
exclude("**/diagnostics/*.class")
|
||||||
setupV8()
|
setupV8()
|
||||||
setupSpiderMonkey()
|
setupSpiderMonkey()
|
||||||
setupWasmStdlib()
|
setupWasmStdlib()
|
||||||
setupGradlePropertiesForwarding()
|
setupGradlePropertiesForwarding()
|
||||||
systemProperty("kotlin.wasm.test.root.out.dir", "$buildDir/")
|
systemProperty("kotlin.wasm.test.root.out.dir", "$buildDir/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
projectTest(
|
||||||
|
taskName = "diagnosticsTest",
|
||||||
|
parallel = true,
|
||||||
|
jUnitMode = JUnitMode.JUnit5
|
||||||
|
) {
|
||||||
|
workingDir = rootDir
|
||||||
|
include("**/diagnostics/*.class")
|
||||||
|
useJUnitPlatform()
|
||||||
|
setupWasmStdlib()
|
||||||
|
setupGradlePropertiesForwarding()
|
||||||
|
systemProperty("kotlin.wasm.test.root.out.dir", "$buildDir/")
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,9 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.generators.tests
|
package org.jetbrains.kotlin.generators.tests
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.generators.generateTestGroupSuiteWithJUnit5
|
||||||
import org.jetbrains.kotlin.generators.impl.generateTestGroupSuite
|
import org.jetbrains.kotlin.generators.impl.generateTestGroupSuite
|
||||||
import org.jetbrains.kotlin.test.TargetBackend
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
import org.jetbrains.kotlin.wasm.test.*
|
import org.jetbrains.kotlin.wasm.test.*
|
||||||
|
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmTest
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
System.setProperty("java.awt.headless", "true")
|
System.setProperty("java.awt.headless", "true")
|
||||||
@@ -52,4 +54,12 @@ fun main(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
generateTestGroupSuiteWithJUnit5(args) {
|
||||||
|
testGroup("wasm/wasm.tests/tests-gen", "compiler/testData") {
|
||||||
|
testClass<AbstractDiagnosticsWasmTest> {
|
||||||
|
model("diagnostics/wasmTests")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.wasm.*
|
|||||||
import org.jetbrains.kotlin.backend.wasm.dce.eliminateDeadDeclarations
|
import org.jetbrains.kotlin.backend.wasm.dce.eliminateDeadDeclarations
|
||||||
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
|
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||||
|
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
@@ -140,7 +141,8 @@ abstract class BasicWasmBoxTest(
|
|||||||
// TODO: Bypass the resolver fow wasm.
|
// TODO: Bypass the resolver fow wasm.
|
||||||
listOf(System.getProperty("kotlin.wasm.stdlib.path")!!, System.getProperty("kotlin.wasm.kotlin.test.path")!!),
|
listOf(System.getProperty("kotlin.wasm.stdlib.path")!!, System.getProperty("kotlin.wasm.kotlin.test.path")!!),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
AnalyzerWithCompilerReport(config.configuration)
|
AnalyzerWithCompilerReport(config.configuration),
|
||||||
|
analyzerFacade = TopDownAnalyzerFacadeForWasm
|
||||||
)
|
)
|
||||||
|
|
||||||
val (allModules, backendContext) = compileToLoweredIr(
|
val (allModules, backendContext) = compileToLoweredIr(
|
||||||
|
|||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.wasm.test.diagnostics
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||||
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
|
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
||||||
|
import org.jetbrains.kotlin.test.builders.classicFrontendStep
|
||||||
|
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||||
|
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
|
||||||
|
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
|
||||||
|
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
|
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||||
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
||||||
|
import org.jetbrains.kotlin.test.services.JsLibraryProvider
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
|
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||||
|
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||||
|
|
||||||
|
abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
||||||
|
override fun TestConfigurationBuilder.configuration() {
|
||||||
|
globalDefaults {
|
||||||
|
frontend = FrontendKinds.ClassicFrontend
|
||||||
|
targetPlatform = WasmPlatforms.Default
|
||||||
|
dependencyKind = DependencyKind.Source
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultDirectives {
|
||||||
|
+JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
|
||||||
|
}
|
||||||
|
|
||||||
|
enableMetaInfoHandler()
|
||||||
|
|
||||||
|
useConfigurators(
|
||||||
|
::CommonEnvironmentConfigurator,
|
||||||
|
::WasmEnvironmentConfigurator,
|
||||||
|
)
|
||||||
|
|
||||||
|
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
||||||
|
useAdditionalSourceProviders(
|
||||||
|
::AdditionalDiagnosticsSourceFilesProvider,
|
||||||
|
::CoroutineHelpersSourceFilesProvider,
|
||||||
|
)
|
||||||
|
useAdditionalService(::JsLibraryProvider)
|
||||||
|
|
||||||
|
classicFrontendStep()
|
||||||
|
classicFrontendHandlersStep {
|
||||||
|
useHandlers(
|
||||||
|
::DeclarationsDumpHandler,
|
||||||
|
::ClassicDiagnosticsHandler,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user