[Wasm] Support WASI target in K2
- Support WASI mode in CLI and test infrastructure - Add external declaration checker - Split Fir diagnostic lists into Base, JS and WASI #KT-56849 Fixed
This commit is contained in:
committed by
Space Team
parent
f26b0a5be6
commit
e901629cf0
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchSco
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||
import org.jetbrains.kotlin.js.config.wasmTarget
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||
@@ -261,6 +262,7 @@ fun <F> prepareWasmSessions(
|
||||
sessionProvider,
|
||||
extensionRegistrars,
|
||||
configuration.languageVersionSettings,
|
||||
configuration.wasmTarget,
|
||||
lookupTracker,
|
||||
icData = icData,
|
||||
registerExtraComponents = {},
|
||||
|
||||
+5
@@ -65,4 +65,9 @@ object WASM_DIAGNOSTICS_LIST : DiagnosticList("FirWasmErrors") {
|
||||
parameter<ConeKotlinType>("type")
|
||||
}
|
||||
}
|
||||
|
||||
val WASI by object : DiagnosticGroup("WASI") {
|
||||
val WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION by error<KtElement>()
|
||||
val WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT by error<KtElement>()
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -48,6 +48,10 @@ object FirWasmErrors {
|
||||
val WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val WASM_IMPORT_EXPORT_UNSUPPORTED_RETURN_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
|
||||
// WASI
|
||||
val WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION by error0<KtElement>()
|
||||
val WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT by error0<KtElement>()
|
||||
|
||||
init {
|
||||
RootDiagnosticRendererFactory.registerFactory(FirWasmErrorsDefaultMessages)
|
||||
}
|
||||
|
||||
+5
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NESTED_W
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NESTED_WASM_IMPORT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_DECLARATION_IN_INAPPROPRIATE_FILE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_EXPORT_ON_EXTERNAL_DECLARATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_PARAMETER_DEFAULT_VALUE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE
|
||||
@@ -95,5 +97,8 @@ object FirWasmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
"Unsupported ''@WasmImport'' and ''@WasmExport'' return type ''{0}''.",
|
||||
FirDiagnosticRenderers.RENDER_TYPE
|
||||
)
|
||||
|
||||
map.put(WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION, "Only top-level functions can be external.")
|
||||
map.put(WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT, "External functions should be annotated with '@WasmImport'.")
|
||||
}
|
||||
}
|
||||
|
||||
+15
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.declaration.*
|
||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration.FirJsExportAnnotationChecker
|
||||
|
||||
object WasmDeclarationCheckers : DeclarationCheckers() {
|
||||
object WasmBaseDeclarationCheckers : DeclarationCheckers() {
|
||||
override val classCheckers: Set<FirClassChecker>
|
||||
get() = setOf(
|
||||
FirWasmExternalInheritanceChecker,
|
||||
@@ -17,13 +17,26 @@ object WasmDeclarationCheckers : DeclarationCheckers() {
|
||||
|
||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||
get() = setOf(
|
||||
FirWasmJsInteropTypesChecker,
|
||||
FirWasmImportAnnotationChecker,
|
||||
FirWasmExportAnnotationChecker,
|
||||
FirWasmExternalChecker,
|
||||
)
|
||||
}
|
||||
|
||||
object WasmJsDeclarationCheckers : DeclarationCheckers() {
|
||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||
get() = setOf(
|
||||
FirWasmJsInteropTypesChecker,
|
||||
FirWasmJsFunAnnotationChecker,
|
||||
FirJsExportAnnotationChecker,
|
||||
FirWasmJsModuleChecker,
|
||||
FirWasmExternalFileChecker,
|
||||
)
|
||||
}
|
||||
|
||||
object WasmWasiDeclarationCheckers : DeclarationCheckers() {
|
||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||
get() = setOf(
|
||||
FirWasmWasiExternalDeclarationChecker,
|
||||
)
|
||||
}
|
||||
+14
-8
@@ -13,12 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.wasm.checkers.expression.FirWasmReified
|
||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsCodeConstantArgumentChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsQualifierChecker
|
||||
|
||||
object WasmExpressionCheckers : ExpressionCheckers() {
|
||||
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
||||
get() = setOf(
|
||||
FirJsQualifierChecker,
|
||||
)
|
||||
|
||||
object WasmBaseExpressionCheckers : ExpressionCheckers() {
|
||||
override val basicExpressionCheckers: Set<FirBasicExpressionChecker>
|
||||
get() = setOf(
|
||||
FirWasmDefinedExternallyCallChecker,
|
||||
@@ -27,8 +22,19 @@ object WasmExpressionCheckers : ExpressionCheckers() {
|
||||
|
||||
override val functionCallCheckers: Set<FirFunctionCallChecker>
|
||||
get() = setOf(
|
||||
FirJsCodeConstantArgumentChecker,
|
||||
FirWasmJsCodeCallChecker,
|
||||
FirWasmReifiedExternalChecker
|
||||
)
|
||||
}
|
||||
|
||||
object WasmJsExpressionCheckers : ExpressionCheckers() {
|
||||
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
||||
get() = setOf(
|
||||
FirJsQualifierChecker,
|
||||
)
|
||||
|
||||
override val functionCallCheckers: Set<FirFunctionCallChecker>
|
||||
get() = setOf(
|
||||
FirJsCodeConstantArgumentChecker,
|
||||
FirWasmJsCodeCallChecker,
|
||||
)
|
||||
}
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.FirTypeRefChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
||||
|
||||
object WasmTypeCheckers : TypeCheckers() {
|
||||
object WasmBaseTypeCheckers : TypeCheckers() {
|
||||
override val typeRefCheckers: Set<FirTypeRefChecker>
|
||||
get() = setOf(
|
||||
FirDynamicUnsupportedChecker,
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.fir.analysis.wasm.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.name.WasmStandardClassIds
|
||||
|
||||
object FirWasmWasiExternalDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (!declaration.symbol.isEffectivelyExternal(context.session)) return
|
||||
|
||||
if (declaration is FirSimpleFunction) {
|
||||
if (!context.isTopLevel) {
|
||||
reporter.reportOn(declaration.source, FirWasmErrors.WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION, context)
|
||||
} else {
|
||||
if (!declaration.hasAnnotation(WasmStandardClassIds.Annotations.WasmImport, context.session)) {
|
||||
reporter.reportOn(declaration.source, FirWasmErrors.WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-7
@@ -13,10 +13,9 @@ import org.jetbrains.kotlin.fir.analysis.jvm.checkers.JvmExpressionCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.JvmTypeCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeDeclarationCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeExpressionCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmDeclarationCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmExpressionCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmTypeCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.*
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||
|
||||
fun FirSessionConfigurator.registerCommonCheckers() {
|
||||
useCheckers(CommonDeclarationCheckers)
|
||||
@@ -48,8 +47,18 @@ fun FirSessionConfigurator.registerNativeCheckers() {
|
||||
useCheckers(NativeExpressionCheckers)
|
||||
}
|
||||
|
||||
fun FirSessionConfigurator.registerWasmCheckers() {
|
||||
useCheckers(WasmDeclarationCheckers)
|
||||
useCheckers(WasmExpressionCheckers)
|
||||
useCheckers(WasmTypeCheckers)
|
||||
fun FirSessionConfigurator.registerWasmCheckers(target: WasmTarget) {
|
||||
useCheckers(WasmBaseDeclarationCheckers)
|
||||
useCheckers(WasmBaseExpressionCheckers)
|
||||
useCheckers(WasmBaseTypeCheckers)
|
||||
|
||||
when (target) {
|
||||
WasmTarget.JS -> {
|
||||
useCheckers(WasmJsDeclarationCheckers)
|
||||
useCheckers(WasmJsExpressionCheckers)
|
||||
}
|
||||
WasmTarget.WASI -> {
|
||||
useCheckers(WasmWasiDeclarationCheckers)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFuncti
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -27,6 +28,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||
wasmTarget: WasmTarget,
|
||||
lookupTracker: LookupTracker?,
|
||||
icData: KlibIcData? = null,
|
||||
registerExtraComponents: ((FirSession) -> Unit) = {},
|
||||
@@ -45,7 +47,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
|
||||
it.registerDefaultComponents()
|
||||
registerExtraComponents(it)
|
||||
},
|
||||
registerExtraCheckers = { it.registerWasmCheckers() },
|
||||
registerExtraCheckers = { it.registerWasmCheckers(wasmTarget) },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } },
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
listOfNotNull(
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// FIR_IDENTICAL
|
||||
import kotlin.wasm.WasmImport
|
||||
|
||||
<!WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT!>external fun foo(): Int<!>
|
||||
|
||||
external interface I {
|
||||
<!WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION!>fun foo(): Int<!>
|
||||
}
|
||||
|
||||
@WasmImport("a", "b")
|
||||
external fun importedFoo(): Int
|
||||
+2
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.session.*
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||
import org.jetbrains.kotlin.js.config.wasmTarget
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
@@ -398,6 +399,7 @@ open class FirFrontendFacade(
|
||||
sessionProvider,
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).wasmTarget,
|
||||
null,
|
||||
registerExtraComponents = ::registerExtraComponents,
|
||||
sessionConfigurator,
|
||||
|
||||
+2
-1
@@ -57,7 +57,7 @@ object TestFirWasmSessionFactory {
|
||||
|
||||
fun createModuleBasedSession(
|
||||
mainModuleData: FirModuleData, sessionProvider: FirProjectSessionProvider, extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings, lookupTracker: LookupTracker?,
|
||||
languageVersionSettings: LanguageVersionSettings, wasmTarget: WasmTarget, lookupTracker: LookupTracker?,
|
||||
registerExtraComponents: ((FirSession) -> Unit),
|
||||
sessionConfigurator: FirSessionConfigurator.() -> Unit,
|
||||
): FirSession =
|
||||
@@ -66,6 +66,7 @@ object TestFirWasmSessionFactory {
|
||||
sessionProvider,
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
wasmTarget,
|
||||
lookupTracker,
|
||||
icData = null,
|
||||
registerExtraComponents,
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.js.config
|
||||
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
|
||||
enum class WasmTarget {
|
||||
JS,
|
||||
WASI;
|
||||
@@ -16,4 +18,7 @@ enum class WasmTarget {
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val CompilerConfiguration.wasmTarget: WasmTarget
|
||||
get() = get(JSConfigurationKeys.WASM_TARGET, /* defaultValue = */ WasmTarget.JS)
|
||||
-1
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker
|
||||
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
|
||||
// TODO: Implement in K2: KT-56849
|
||||
object WasmWasiExternalDeclarationChecker : DeclarationChecker {
|
||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||
if (descriptor !is MemberDescriptor) return
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
||||
import org.jetbrains.kotlin.wasm.test.*
|
||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmTest
|
||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsFirWasmTest
|
||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsFirWasmWasiTest
|
||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmWasiTest
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
System.setProperty("java.awt.headless", "true")
|
||||
@@ -36,6 +38,14 @@ fun main(args: Array<String>) {
|
||||
testClass<AbstractDiagnosticsFirWasmTest> {
|
||||
model("diagnostics/wasmTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||
}
|
||||
|
||||
testClass<AbstractDiagnosticsWasmWasiTest> {
|
||||
model("diagnostics/wasmWasiTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||
}
|
||||
|
||||
testClass<AbstractDiagnosticsFirWasmWasiTest> {
|
||||
model("diagnostics/wasmWasiTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||
}
|
||||
}
|
||||
|
||||
testGroup("wasm/wasm.tests/tests-gen", "js/js.translator/testData", testRunnerMethodName = "runTest0") {
|
||||
|
||||
+11
-3
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.wasm.test.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.FirParser
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.builders.firHandlersStep
|
||||
@@ -16,13 +17,19 @@ 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.runners.configurationForClassicAndFirTestsAlongside
|
||||
import org.jetbrains.kotlin.test.services.AbstractEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorWasi
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||
|
||||
abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : AbstractKotlinCompilerTest() {
|
||||
abstract class AbstractFirWasmDiagnosticTestBase(
|
||||
val parser: FirParser,
|
||||
private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>,
|
||||
) : AbstractKotlinCompilerTest() {
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
globalDefaults {
|
||||
frontend = FrontendKinds.FIR
|
||||
@@ -37,7 +44,7 @@ abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : Abstra
|
||||
|
||||
useConfigurators(
|
||||
::CommonEnvironmentConfigurator,
|
||||
::WasmEnvironmentConfiguratorJs,
|
||||
wasmEnvironmentConfigurator,
|
||||
)
|
||||
|
||||
useAdditionalSourceProviders(
|
||||
@@ -61,4 +68,5 @@ abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : Abstra
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi)
|
||||
abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorJs)
|
||||
abstract class AbstractDiagnosticsFirWasmWasiTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorWasi)
|
||||
+11
-2
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.wasm.test.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
||||
import org.jetbrains.kotlin.test.builders.classicFrontendStep
|
||||
@@ -15,14 +16,18 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaIn
|
||||
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.AbstractEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorWasi
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||
|
||||
abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
||||
abstract class AbstractDiagnosticsWasmTestBase(
|
||||
private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>,
|
||||
) : AbstractKotlinCompilerTest() {
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
globalDefaults {
|
||||
frontend = FrontendKinds.ClassicFrontend
|
||||
@@ -38,7 +43,7 @@ abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
||||
|
||||
useConfigurators(
|
||||
::CommonEnvironmentConfigurator,
|
||||
::WasmEnvironmentConfiguratorJs,
|
||||
wasmEnvironmentConfigurator,
|
||||
)
|
||||
|
||||
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
||||
@@ -56,3 +61,7 @@ abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AbstractDiagnosticsWasmTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorJs)
|
||||
abstract class AbstractDiagnosticsWasmWasiTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorWasi)
|
||||
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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 com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateWasmTestsKt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/diagnostics/wasmWasiTests")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class DiagnosticsFirWasmWasiTestGenerated extends AbstractDiagnosticsFirWasmWasiTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInWasmWasiTests() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/wasmWasiTests"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("external.kt")
|
||||
public void testExternal() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/wasmWasiTests/external.kt");
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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 com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateWasmTestsKt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/diagnostics/wasmWasiTests")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class DiagnosticsWasmWasiTestGenerated extends AbstractDiagnosticsWasmWasiTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInWasmWasiTests() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/wasmWasiTests"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("external.kt")
|
||||
public void testExternal() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/wasmWasiTests/external.kt");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user