[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:
Svyatoslav Kuzmich
2023-11-22 15:57:51 +01:00
committed by Space Team
parent f26b0a5be6
commit e901629cf0
20 changed files with 216 additions and 27 deletions
@@ -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 = {},
@@ -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>()
}
}
@@ -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)
}
@@ -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'.")
}
}
@@ -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,
)
}
@@ -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,
)
}
@@ -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,
@@ -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)
}
}
}
}
}
@@ -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)
}
}
}
@@ -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(
+11
View File
@@ -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
@@ -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,
@@ -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)
@@ -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") {
@@ -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)
@@ -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)
@@ -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");
}
}
@@ -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");
}
}