From 2d934f635716fc4cfa605aababe72c5f33fecdcc Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Mon, 16 Oct 2023 12:51:14 +0200 Subject: [PATCH] [JS FIR] Generate FIR checker components Generate components for JSCODE_ARGUMENT_NON_CONST_EXPRESSION ^KT-59435 --- .../api/fir/diagnostics/KtFirDataClassConverters.kt | 6 ++++++ .../kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt | 4 ++++ .../analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt | 5 +++++ .../checkers/generator/diagnostics/FirJsDiagnosticsList.kt | 4 ++++ .../kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt | 3 +++ .../analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt | 2 ++ .../analysis/diagnostics/FirNonSuppressibleErrorNames.kt | 1 + 7 files changed, 25 insertions(+) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index b4a436d2971..1ace39d2cd0 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -5651,6 +5651,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirJsErrors.JSCODE_ARGUMENT_NON_CONST_EXPRESSION) { firDiagnostic -> + JscodeArgumentNonConstExpressionImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirSyntaxErrors.SYNTAX) { firDiagnostic -> SyntaxImpl( firDiagnostic.a, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 55c03e9e95c..2ee9c52d6c2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -3929,6 +3929,10 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val operation: String } + interface JscodeArgumentNonConstExpression : KtFirDiagnostic { + override val diagnosticClass get() = JscodeArgumentNonConstExpression::class + } + interface Syntax : KtFirDiagnostic { override val diagnosticClass get() = Syntax::class val message: String diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 8c3f40ab5d9..4a88d86a0e2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -4748,6 +4748,11 @@ internal class WrongOperationWithDynamicImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.WrongOperationWithDynamic +internal class JscodeArgumentNonConstExpressionImpl( + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.JscodeArgumentNonConstExpression + internal class SyntaxImpl( override val message: String, firDiagnostic: KtPsiDiagnostic, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt index 3124809348b..7323f4e143a 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt @@ -150,4 +150,8 @@ object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors") { parameter("operation") } } + + val JSCODE by object : DiagnosticGroup("JsCode") { + val JSCODE_ARGUMENT_NON_CONST_EXPRESSION by error() + } } diff --git a/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt b/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt index 96d32404a08..d99355ec878 100644 --- a/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt +++ b/compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt @@ -103,6 +103,9 @@ object FirJsErrors { val SPREAD_OPERATOR_IN_DYNAMIC_CALL by error0(SourceElementPositioningStrategies.SPREAD_OPERATOR) val WRONG_OPERATION_WITH_DYNAMIC by error1() + // JsCode + val JSCODE_ARGUMENT_NON_CONST_EXPRESSION by error0() + init { RootDiagnosticRendererFactory.registerFactory(FirJsErrorsDefaultMessages) } diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt index 4974a97ab8f..b3711428a66 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.ENUM_CLASS_I import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_EXTERNAL_INHERITORS_ONLY import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.INLINE_EXTERNAL_DECLARATION +import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JSCODE_ARGUMENT_NON_CONST_EXPRESSION import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_BUILTIN_NAME_CLASH import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_EXTERNAL_ARGUMENT import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.JS_MODULE_PROHIBITED_ON_NON_NATIVE @@ -247,5 +248,6 @@ object FirJsErrorsDefaultMessages : BaseDiagnosticRendererFactory() { "Exported declaration contains non-consumable identifier ''{0}'', which cannot be represented inside TS definitions and ESM.", CommonRenderers.STRING, ) + map.put(JSCODE_ARGUMENT_NON_CONST_EXPRESSION, "An argument for the 'js()' function must be a constant string expression.") } } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt index 8b2374bf0c0..61ca3051203 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt @@ -650,6 +650,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "PROPERTY_DELEGATION_BY_DYNAMIC", "SPREAD_OPERATOR_IN_DYNAMIC_CALL", "WRONG_OPERATION_WITH_DYNAMIC", + "JSCODE_ARGUMENT_NON_CONST_EXPRESSION", "THROWS_LIST_EMPTY", "INCOMPATIBLE_THROWS_OVERRIDE", "INCOMPATIBLE_THROWS_INHERITED",