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 73e76834198..fe0fce3480f 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 @@ -115,7 +115,6 @@ object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors") { } val EXPORT by object : DiagnosticGroup("Export") { - val NESTED_JS_EXPORT by error() val WRONG_EXPORTED_DECLARATION by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { parameter("kind") } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirWebCommonDiagnosticList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirWebCommonDiagnosticList.kt index e1abadd4223..69ff40596a8 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirWebCommonDiagnosticList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirWebCommonDiagnosticList.kt @@ -30,6 +30,10 @@ object WEB_COMMON_DIAGNOSTICS_LIST : DiagnosticList("FirWebCommonErrors") { val WRONG_DEFAULT_VALUE_FOR_EXTERNAL_FUN_PARAMETER by error() } + val EXPORT by object : DiagnosticGroup("Export") { + val NESTED_JS_EXPORT by error() + } + 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 f35a0375abb..355fb29bb67 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 @@ -76,7 +76,6 @@ object FirJsErrors { val EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) // Export - val NESTED_JS_EXPORT by error0() val WRONG_EXPORTED_DECLARATION by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val NON_EXPORTABLE_TYPE by warning2(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val NON_CONSUMABLE_EXPORTED_IDENTIFIER by warning1() 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 e6fb5b44926..4c8f138f2b4 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 @@ -45,7 +45,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NATIVE_INDEX import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NATIVE_INDEXER_WRONG_PARAMETER_COUNT import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NATIVE_SETTER_WRONG_RETURN_TYPE -import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NESTED_JS_EXPORT import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NESTED_JS_MODULE_PROHIBITED import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NON_CONSUMABLE_EXPORTED_IDENTIFIER import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.NON_EXPORTABLE_TYPE @@ -201,7 +200,6 @@ object FirJsErrorsDefaultMessages : BaseDiagnosticRendererFactory() { FirDiagnosticRenderers.RENDER_TYPE, ) map.put(EXTERNAL_INTERFACE_AS_CLASS_LITERAL, "Cannot refer to external interface from class literal.") - map.put(NESTED_JS_EXPORT, "'@JsExport' is only allowed on files and top-level declarations.") map.put(WRONG_EXPORTED_DECLARATION, "Declaration of such kind ({0}) cannot be exported to JavaScript.", CommonRenderers.STRING) map.put( NON_EXPORTABLE_TYPE, diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/JsDeclarationCheckers.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/JsDeclarationCheckers.kt index 5838839bf23..4bfc72739ec 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/JsDeclarationCheckers.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/JsDeclarationCheckers.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.js.checkers import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* import org.jetbrains.kotlin.fir.analysis.js.checkers.declaration.* +import org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration.FirJsExportAnnotationChecker object JsDeclarationCheckers : DeclarationCheckers() { override val functionCheckers: Set diff --git a/compiler/fir/checkers/checkers.wasm/src/org/jetbrains/kotlin/fir/analysis/wasm/checkers/WasmDeclarationCheckers.kt b/compiler/fir/checkers/checkers.wasm/src/org/jetbrains/kotlin/fir/analysis/wasm/checkers/WasmDeclarationCheckers.kt index b1075f872b6..301ea803d30 100644 --- a/compiler/fir/checkers/checkers.wasm/src/org/jetbrains/kotlin/fir/analysis/wasm/checkers/WasmDeclarationCheckers.kt +++ b/compiler/fir/checkers/checkers.wasm/src/org/jetbrains/kotlin/fir/analysis/wasm/checkers/WasmDeclarationCheckers.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.wasm.checkers 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() { override val classCheckers: Set @@ -21,5 +22,6 @@ object WasmDeclarationCheckers : DeclarationCheckers() { FirWasmExportAnnotationChecker, FirWasmExternalChecker, FirWasmJsFunAnnotationChecker, + FirJsExportAnnotationChecker ) } diff --git a/compiler/fir/checkers/checkers.web.common/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrors.kt b/compiler/fir/checkers/checkers.web.common/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrors.kt index 2f16f21df80..c39797a2d35 100644 --- a/compiler/fir/checkers/checkers.web.common/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrors.kt +++ b/compiler/fir/checkers/checkers.web.common/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrors.kt @@ -33,6 +33,9 @@ object FirWebCommonErrors { val WRONG_INITIALIZER_OF_EXTERNAL_DECLARATION by error0() val WRONG_DEFAULT_VALUE_FOR_EXTERNAL_FUN_PARAMETER by error0() + // Export + val NESTED_JS_EXPORT by error0() + // JsCode val JSCODE_ARGUMENT_NON_CONST_EXPRESSION by error0() diff --git a/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrorsDefaultMessages.kt b/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrorsDefaultMessages.kt index c4309443276..c5164c35927 100644 --- a/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/diagnostics/web/common/FirWebCommonErrorsDefaultMessages.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErro import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.JSCODE_ARGUMENT_NON_CONST_EXPRESSION import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.NESTED_CLASS_IN_EXTERNAL_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.NESTED_EXTERNAL_DECLARATION +import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.NESTED_JS_EXPORT import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.NON_ABSTRACT_MEMBER_OF_EXTERNAL_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.WRONG_BODY_OF_EXTERNAL_DECLARATION import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors.WRONG_DEFAULT_VALUE_FOR_EXTERNAL_FUN_PARAMETER @@ -47,6 +48,8 @@ object FirWebCommonErrorsDefaultMessages : BaseDiagnosticRendererFactory() { "Wrong default value for parameter of external function. Must be ' = definedExternally'." ) + map.put(NESTED_JS_EXPORT, "'@JsExport' is only allowed on files and top-level declarations.") + map.put(JSCODE_ARGUMENT_NON_CONST_EXPRESSION, "An argument for the 'js()' function must be a constant string expression.") } } \ No newline at end of file diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExportAnnotationChecker.kt b/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/web/common/checkers/declaration/FirJsExportAnnotationChecker.kt similarity index 68% rename from compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExportAnnotationChecker.kt rename to compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/web/common/checkers/declaration/FirJsExportAnnotationChecker.kt index 2ff03e1e42f..c97599c9bb3 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExportAnnotationChecker.kt +++ b/compiler/fir/checkers/checkers.web.common/src/org/jetbrains/kotlin/fir/analysis/web/common/checkers/declaration/FirJsExportAnnotationChecker.kt @@ -3,25 +3,25 @@ * 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.js.checkers.declaration +package org.jetbrains.kotlin.fir.analysis.web.common.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.js.FirJsErrors +import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId -import org.jetbrains.kotlin.name.JsStandardClassIds +import org.jetbrains.kotlin.name.WebCommonStandardClassIds object FirJsExportAnnotationChecker : FirBasicDeclarationChecker() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { - val jsExport = declaration.getAnnotationByClassId(JsStandardClassIds.Annotations.JsExport, context.session) ?: return + val jsExport = declaration.getAnnotationByClassId(WebCommonStandardClassIds.Annotations.JsExport, context.session) ?: return if (declaration !is FirFile && !context.isTopLevel) { - reporter.reportOn(jsExport.source, FirJsErrors.NESTED_JS_EXPORT, context) + reporter.reportOn(jsExport.source, FirWebCommonErrors.NESTED_JS_EXPORT, context) } } } \ No newline at end of file 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 022014a977e..a7cfcdf0fa9 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 @@ -633,8 +633,8 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "JS_EXTERNAL_INHERITORS_ONLY", "JS_EXTERNAL_ARGUMENT", "EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT", - "NESTED_JS_EXPORT", "WRONG_EXPORTED_DECLARATION", + "NESTED_JS_EXPORT", "DELEGATION_BY_DYNAMIC", "PROPERTY_DELEGATION_BY_DYNAMIC", "SPREAD_OPERATOR_IN_DYNAMIC_CALL", diff --git a/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.fir.kt b/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.fir.kt deleted file mode 100644 index 52423ffd775..00000000000 --- a/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.fir.kt +++ /dev/null @@ -1,25 +0,0 @@ -// !OPT_IN: kotlin.js.ExperimentalJsExport - -@JsExport -fun foo1() { -} - -class C { - @JsExport - fun memberFunction() { - } -} - -fun foo2() { - @JsExport - fun localFun() { - } -} - -val p1 = (@JsExport fun () {}) - -@JsExport -class C2 - -@JsExport -var p2: Int = 1 diff --git a/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.kt b/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.kt index f255fc9e48e..68a33d49475 100644 --- a/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.kt +++ b/compiler/testData/diagnostics/wasmTests/jsInterop/jsExport.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !OPT_IN: kotlin.js.ExperimentalJsExport @JsExport