diff --git a/.space/CODEOWNERS b/.space/CODEOWNERS index f00b1a38fc6..291a6f2c6e8 100644 --- a/.space/CODEOWNERS +++ b/.space/CODEOWNERS @@ -376,8 +376,8 @@ /plugins/kapt3/kapt3-compiler/tests-gen/ "Kotlin Compiler Core" "Kotlin JVM" /plugins/kapt4/ "Kotlin JVM" /plugins/kotlinx-serialization/ Sergey.Shanshin Leonid.Startsev -/plugins/jso/ "Kotlin JS" -/libraries/tools/jso "Kotlin JS" +/plugins/js-plain-objects/ "Kotlin JS" +/libraries/tools/js-plain-objects "Kotlin JS" /plugins/lombok/ "Kotlin Compiler Core" /plugins/noarg/ "Kotlin Compiler Core" /plugins/parcelize/ "Kotlin Compiler Core" diff --git a/build.gradle.kts b/build.gradle.kts index c4ac9149d37..b078451d7af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -874,7 +874,7 @@ tasks { dependsOn(":plugins:fir-plugin-prototype:fir-plugin-ic-test:test") dependsOn(":kotlin-imports-dumper-compiler-plugin:test") dependsOn(":plugins:jvm-abi-gen:test") - dependsOn(":plugins:jso:compiler-plugin:test") + dependsOn(":plugins:js-plain-objects:compiler-plugin:test") dependsOn(":kotlinx-serialization-compiler-plugin:test") dependsOn(":kotlin-lombok-compiler-plugin:test") dependsOn(":kotlin-noarg-compiler-plugin:test") diff --git a/libraries/tools/js-plain-objects/build.gradle.kts b/libraries/tools/js-plain-objects/build.gradle.kts new file mode 100644 index 00000000000..9fa61ff65e2 --- /dev/null +++ b/libraries/tools/js-plain-objects/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + id("gradle-plugin-common-configuration") +} + +dependencies { + commonApi(platform(project(":kotlin-gradle-plugins-bom"))) +} + +gradlePlugin { + plugins { + create("js-plain-objects") { + id = "org.jetbrains.kotlin.plugin.js-plain-objects" + displayName = "Kotlin compiler plugin for typed JS-objects library" + description = displayName + implementationClass = "org.jetbrains.kotlinx.jspo.gradle.JsPlainObjectsKotlinGradleSubplugin" + } + } +} \ No newline at end of file diff --git a/libraries/tools/jso/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsoKotlinGradleSubplugin.kt b/libraries/tools/js-plain-objects/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsPlainObjectsKotlinGradleSubplugin.kt similarity index 81% rename from libraries/tools/jso/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsoKotlinGradleSubplugin.kt rename to libraries/tools/js-plain-objects/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsPlainObjectsKotlinGradleSubplugin.kt index 011e012d778..6133fe63a77 100644 --- a/libraries/tools/jso/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsoKotlinGradleSubplugin.kt +++ b/libraries/tools/js-plain-objects/src/common/kotlin/org/jetbrains/kotlinx/jso/gradle/JsPlainObjectsKotlinGradleSubplugin.kt @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.jetbrains.kotlinx.jso.gradle +package org.jetbrains.kotlinx.jspo.gradle import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.plugin.* -class JsoKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { +class JsPlainObjectsKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { companion object { - const val JSO_ARTIFACT_NAME = "kotlinx-jso-compiler-plugin-embeddable" + const val JS_PLAIN_OBJECTS_ARTIFACT_NAME = "kotlinx-js-plain-objects-compiler-plugin-embeddable" } override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = @@ -33,9 +33,9 @@ class JsoKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { kotlinCompilation.target.project.provider { emptyList() } override fun getPluginArtifact(): SubpluginArtifact = - JetBrainsSubpluginArtifact(JSO_ARTIFACT_NAME) + JetBrainsSubpluginArtifact(JS_PLAIN_OBJECTS_ARTIFACT_NAME) - override fun getCompilerPluginId() = "org.jetbrains.kotlinx.jso" + override fun getCompilerPluginId() = "org.jetbrains.kotlinx.js-plain-objects" private fun KotlinTarget.isJs() = platformType == KotlinPlatformType.js diff --git a/libraries/tools/js-plain-objects/src/common/resources/META-INF/gradle-plugins/kotlinx-js-plain-objects.properties b/libraries/tools/js-plain-objects/src/common/resources/META-INF/gradle-plugins/kotlinx-js-plain-objects.properties new file mode 100644 index 00000000000..69fba5f04f2 --- /dev/null +++ b/libraries/tools/js-plain-objects/src/common/resources/META-INF/gradle-plugins/kotlinx-js-plain-objects.properties @@ -0,0 +1 @@ +implementation-class=org.jetbrains.kotlinx.jspo.gradle.JsPlainObjectsKotlinGradleSubplugin \ No newline at end of file diff --git a/libraries/tools/jso/build.gradle.kts b/libraries/tools/jso/build.gradle.kts deleted file mode 100644 index 73e3739890d..00000000000 --- a/libraries/tools/jso/build.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -plugins { - id("gradle-plugin-common-configuration") -} - -dependencies { - commonApi(platform(project(":kotlin-gradle-plugins-bom"))) -} - -gradlePlugin { - plugins { - create("jso") { - id = "org.jetbrains.kotlin.plugin.jso" - displayName = "Kotlin compiler plugin for kotlinx.jso library" - description = displayName - implementationClass = "org.jetbrains.kotlinx.jso.gradle.JsoKotlinGradleSubplugin" - } - } -} \ No newline at end of file diff --git a/libraries/tools/jso/src/common/resources/META-INF/gradle-plugins/kotlinx-jso.properties b/libraries/tools/jso/src/common/resources/META-INF/gradle-plugins/kotlinx-jso.properties deleted file mode 100644 index 39526c33a9a..00000000000 --- a/libraries/tools/jso/src/common/resources/META-INF/gradle-plugins/kotlinx-jso.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=org.jetbrains.kotlinx.jso.gradle.JsoKotlinGradleSubplugin \ No newline at end of file diff --git a/plugins/js-plain-objects/compiler-plugin-embeddable/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin-embeddable/build.gradle.kts new file mode 100644 index 00000000000..249268cc217 --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin-embeddable/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + id("org.jetbrains.kotlin.jvm") +} + +dependencies { + embedded(project(":plugins:js-plain-objects:compiler-plugin")) { isTransitive = false } +} + +publish { + artifactId = "kotlinx-js-plain-objects-compiler-plugin-embeddable" +} + +runtimeJar(rewriteDefaultJarDepsToShadedCompiler()) +sourcesJarWithSourcesFromEmbedded( + project(":plugins:js-plain-objects:compiler-plugin").tasks.named("sourcesJar") +) +javadocJarWithJavadocFromEmbedded( + project(":plugins:js-plain-objects:compiler-plugin").tasks.named("javadocJar") +) diff --git a/plugins/jso/compiler-plugin/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin/build.gradle.kts similarity index 66% rename from plugins/jso/compiler-plugin/build.gradle.kts rename to plugins/js-plain-objects/compiler-plugin/build.gradle.kts index 7448c679b50..fa588c01878 100644 --- a/plugins/jso/compiler-plugin/build.gradle.kts +++ b/plugins/js-plain-objects/compiler-plugin/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute -description = "JavaScript Object Compiler Plugin" +description = "JavaScript Plain Objects Compiler Plugin" plugins { kotlin("jvm") @@ -18,14 +18,14 @@ val jsoIrRuntimeForTests by configurations.creating { } dependencies { - embedded(project(":plugins:jso:compiler-plugin:jso.common")) { isTransitive = false } - embedded(project(":plugins:jso:compiler-plugin:jso.k2")) { isTransitive = false } - embedded(project(":plugins:jso:compiler-plugin:jso.backend")) { isTransitive = false } - embedded(project(":plugins:jso:compiler-plugin:jso.cli")) { isTransitive = false } + embedded(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.common")) { isTransitive = false } + embedded(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.k2")) { isTransitive = false } + embedded(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.backend")) { isTransitive = false } + embedded(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.cli")) { isTransitive = false } testApi(project(":compiler:backend")) testApi(project(":compiler:cli")) - testApi(project(":plugins:jso:compiler-plugin:jso.cli")) + testApi(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.cli")) testApi(projectTests(":compiler:test-infrastructure")) testApi(projectTests(":compiler:test-infrastructure-utils")) @@ -40,9 +40,9 @@ dependencies { testRuntimeOnly(libs.junit.jupiter.engine) if (!project.kotlinBuildProperties.isInJpsBuildIdeaSync) { - jsoIrRuntimeForTests(project(":plugins:jso:runtime")) { isTransitive = false } + jsoIrRuntimeForTests(project(":plugins:js-plain-objects:runtime")) { isTransitive = false } - embedded(project(":plugins:jso:runtime")) { + embedded(project(":plugins:js-plain-objects:runtime")) { attributes { attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir) @@ -65,7 +65,9 @@ sourceSets { } } -publish() +publish { + artifactId = "kotlinx-js-plain-objects-compiler-plugin" +} runtimeJar() sourcesJar() @@ -80,11 +82,11 @@ projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5) { dependsOn(jsoIrRuntimeForTests) - val localJsoIrRuntimePath: FileCollection = jsoIrRuntimeForTests + val localJsPlainObjectsIrRuntimePath: FileCollection = jsoIrRuntimeForTests doFirst { - systemProperty("jso.runtime.path", localJsoIrRuntimePath.asPath) + systemProperty("jso.runtime.path", localJsPlainObjectsIrRuntimePath.asPath) } } -val generateTests by generator("org.jetbrains.kotlinx.jso.TestGeneratorKt") +val generateTests by generator("org.jetbrains.kotlinx.jspo.TestGeneratorKt") diff --git a/plugins/jso/compiler-plugin/jso.backend/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/build.gradle.kts similarity index 68% rename from plugins/jso/compiler-plugin/jso.backend/build.gradle.kts rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/build.gradle.kts index c8a9e8bcfc3..3e680278f92 100644 --- a/plugins/jso/compiler-plugin/jso.backend/build.gradle.kts +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/build.gradle.kts @@ -1,4 +1,4 @@ -description = "Kotlin JavaScript Object Compiler Plugin (Backend)" +description = "Kotlin JavaScript Plain Objects Compiler Plugin (Backend)" plugins { kotlin("jvm") @@ -10,7 +10,7 @@ dependencies { compileOnly(project(":compiler:ir.backend.common")) compileOnly(project(":compiler:ir.tree")) - implementation(project(":plugins:jso:compiler-plugin:jso.common")) + implementation(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.common")) compileOnly(intellijCore()) } diff --git a/plugins/jso/compiler-plugin/jso.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt similarity index 91% rename from plugins/jso/compiler-plugin/jso.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt index d28a2ced868..670b620f7e1 100644 --- a/plugins/jso/compiler-plugin/jso.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.backend/src/org/jetbrains/kotlinx/jso/compiler/backend/JsObjectLoweringExtension.kt @@ -2,7 +2,7 @@ * 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.kotlinx.jso.compiler.backend +package org.jetbrains.kotlinx.jspo.compiler.backend import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.util.OperatorNameConventions -import org.jetbrains.kotlinx.jso.compiler.resolve.JsSimpleObjectPluginKey -import org.jetbrains.kotlinx.jso.compiler.resolve.StandardIds +import org.jetbrains.kotlinx.jspo.compiler.resolve.JsPlainObjectsPluginKey +import org.jetbrains.kotlinx.jspo.compiler.resolve.StandardIds private class MoveExternalInlineFunctionsWithBodiesOutsideLowering(private val context: IrPluginContext) : DeclarationTransformer { private val jsFunction = context.referenceFunctions(StandardIds.JS_FUNCTION_ID).single() - private val EXPECTED_ORIGIN = IrDeclarationOrigin.GeneratedByPlugin(JsSimpleObjectPluginKey) + private val EXPECTED_ORIGIN = IrDeclarationOrigin.GeneratedByPlugin(JsPlainObjectsPluginKey) @OptIn(UnsafeDuringIrConstructionAPI::class) override fun transformFlat(declaration: IrDeclaration): List? { @@ -66,7 +66,7 @@ private class MoveExternalInlineFunctionsWithBodiesOutsideLowering(private val c } } -open class JsObjectLoweringExtension : IrGenerationExtension { +open class JsPlainObjectsLoweringExtension : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { MoveExternalInlineFunctionsWithBodiesOutsideLowering(pluginContext).lower(moduleFragment) } diff --git a/plugins/jso/compiler-plugin/jso.cli/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/build.gradle.kts similarity index 58% rename from plugins/jso/compiler-plugin/jso.cli/build.gradle.kts rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/build.gradle.kts index 0449833fdfa..7c0078b4334 100644 --- a/plugins/jso/compiler-plugin/jso.cli/build.gradle.kts +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/build.gradle.kts @@ -1,4 +1,4 @@ -description = "Kotlin JavaScript Object Compiler Plugin (CLI)" +description = "Kotlin JavaScript Plain Objects Compiler Plugin (CLI)" plugins { kotlin("jvm") @@ -12,9 +12,9 @@ dependencies { compileOnly(project(":compiler:fir:entrypoint")) compileOnly(project(":compiler:ir.backend.common")) - implementation(project(":plugins:jso:compiler-plugin:jso.common")) - implementation(project(":plugins:jso:compiler-plugin:jso.backend")) - implementation(project(":plugins:jso:compiler-plugin:jso.k2")) + implementation(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.common")) + implementation(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.backend")) + implementation(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.k2")) compileOnly(intellijCore()) } diff --git a/plugins/jso/compiler-plugin/jso.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar similarity index 89% rename from plugins/jso/compiler-plugin/jso.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar index c28bd958547..2ddc377f26e 100644 --- a/plugins/jso/compiler-plugin/jso.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar @@ -14,4 +14,4 @@ # limitations under the License. # -org.jetbrains.kotlinx.jso.compiler.cli.JsObjectComponentRegistrar \ No newline at end of file +org.jetbrains.kotlinx.jspo.compiler.cli.JsPlainObjectsComponentRegistrar \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/jso.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsObjectComponentRegistrar.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsPlainObjectsComponentRegistrar.kt similarity index 63% rename from plugins/jso/compiler-plugin/jso.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsObjectComponentRegistrar.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsPlainObjectsComponentRegistrar.kt index c7e48cb7596..b20cc67fb86 100644 --- a/plugins/jso/compiler-plugin/jso.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsObjectComponentRegistrar.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.cli/src/org/jetbrains/kotlinx/jso/compiler/cli/JsPlainObjectsComponentRegistrar.kt @@ -3,16 +3,16 @@ * 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.kotlinx.jso.compiler.cli +package org.jetbrains.kotlinx.jspo.compiler.cli import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter -import org.jetbrains.kotlinx.jso.compiler.backend.JsObjectLoweringExtension -import org.jetbrains.kotlinx.jso.compiler.fir.JsObjectExtensionRegistrar +import org.jetbrains.kotlinx.jspo.compiler.backend.JsPlainObjectsLoweringExtension +import org.jetbrains.kotlinx.jspo.compiler.fir.JsPlainObjectsExtensionRegistrar -class JsObjectComponentRegistrar : CompilerPluginRegistrar() { +class JsPlainObjectsComponentRegistrar : CompilerPluginRegistrar() { override val supportsK2: Boolean get() = true override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) { @@ -21,8 +21,8 @@ class JsObjectComponentRegistrar : CompilerPluginRegistrar() { companion object { fun registerExtensions(extensionStorage: ExtensionStorage) = with(extensionStorage) { - FirExtensionRegistrarAdapter.registerExtension(JsObjectExtensionRegistrar()) - IrGenerationExtension.registerExtension(JsObjectLoweringExtension()) + FirExtensionRegistrarAdapter.registerExtension(JsPlainObjectsExtensionRegistrar()) + IrGenerationExtension.registerExtension(JsPlainObjectsLoweringExtension()) } } } \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/jso.common/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/build.gradle.kts similarity index 80% rename from plugins/jso/compiler-plugin/jso.common/build.gradle.kts rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/build.gradle.kts index fba05fc08cc..84487a7f5f0 100644 --- a/plugins/jso/compiler-plugin/jso.common/build.gradle.kts +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/build.gradle.kts @@ -1,4 +1,4 @@ -description = "Kotlin JavaScript Object Compiler Plugin (Common)" +description = "Kotlin JavaScript Plain Objects Compiler Plugin (Common)" plugins { kotlin("jvm") diff --git a/plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsSimpleObjectPluginKey.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsPlainObjectsPluginKey.kt similarity index 66% rename from plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsSimpleObjectPluginKey.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsPlainObjectsPluginKey.kt index aa077ceb768..605b7f54fff 100644 --- a/plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsSimpleObjectPluginKey.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/JsPlainObjectsPluginKey.kt @@ -3,12 +3,12 @@ * 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.kotlinx.jso.compiler.resolve +package org.jetbrains.kotlinx.jspo.compiler.resolve import org.jetbrains.kotlin.GeneratedDeclarationKey -object JsSimpleObjectPluginKey : GeneratedDeclarationKey() { +object JsPlainObjectsPluginKey : GeneratedDeclarationKey() { override fun toString(): String { - return "KotlinxJsSimpleObjectPlugin" + return "KotlinxJsPlainObjectsPlugin" } } diff --git a/plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt similarity index 64% rename from plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt index 0274a3a3661..d535a7622c0 100644 --- a/plugins/jso/compiler-plugin/jso.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.common/src/org/jetbrains/kotlinx/jso/compiler/resolve/NamingConventions.kt @@ -3,7 +3,7 @@ * 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.kotlinx.jso.compiler.resolve; +package org.jetbrains.kotlinx.jspo.compiler.resolve; import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId @@ -15,7 +15,7 @@ object StandardIds { val JS_FUNCTION_ID = CallableId(KOTLIN_JS_FQN, Name.identifier("js")) } -object JsObjectAnnotations { - val jsSimpleObjectAnnotationClassId = ClassId(FqName("kotlinx.jso"), Name.identifier("JsSimpleObject")) - val jsSimpleObjectAnnotationFqName = jsSimpleObjectAnnotationClassId.asSingleFqName() +object JsPlainObjectsAnnotations { + val jsPlainObjectAnnotationClassId = ClassId(FqName("kotlinx.js"), Name.identifier("JsPlainObject")) + val jsPlainObjectAnnotationFqName = jsPlainObjectAnnotationClassId.asSingleFqName() } \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/jso.k2/build.gradle.kts b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/build.gradle.kts similarity index 81% rename from plugins/jso/compiler-plugin/jso.k2/build.gradle.kts rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/build.gradle.kts index 61a364a7c5e..6ecce4db034 100644 --- a/plugins/jso/compiler-plugin/jso.k2/build.gradle.kts +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/build.gradle.kts @@ -1,4 +1,4 @@ -description = "Kotlin JavaScript Object Compiler Plugin (K2)" +description = "Kotlin JavaScript Plain Objects Compiler Plugin (K2)" plugins { kotlin("jvm") @@ -13,7 +13,7 @@ dependencies { compileOnly(project(":compiler:fir:entrypoint")) compileOnly(project(":compiler:cli-common")) - implementation(project(":plugins:jso:compiler-plugin:jso.common")) + implementation(project(":plugins:js-plain-objects:compiler-plugin:js-plain-objects.common")) compileOnly(intellijCore()) diff --git a/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsExtensionRegistrar.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsExtensionRegistrar.kt new file mode 100644 index 00000000000..4c25d1bcca3 --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsExtensionRegistrar.kt @@ -0,0 +1,19 @@ +/* + * 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.kotlinx.jspo.compiler.fir + +import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar +import org.jetbrains.kotlinx.jspo.compiler.fir.checkers.FirJsPlainObjectsCheckersComponent +import org.jetbrains.kotlinx.jspo.compiler.fir.services.JsPlainObjectsPropertiesProvider + +class JsPlainObjectsExtensionRegistrar : FirExtensionRegistrar() { + override fun ExtensionRegistrarContext.configurePlugin() { + +::FirJsPlainObjectsCheckersComponent + +::JsPlainObjectsFunctionsGenerator + // services + +::JsPlainObjectsPropertiesProvider + } +} \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectFunctionsGenerator.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsFunctionsGenerator.kt similarity index 72% rename from plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectFunctionsGenerator.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsFunctionsGenerator.kt index 8b42012f9a0..d3b41d9473d 100644 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectFunctionsGenerator.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsFunctionsGenerator.kt @@ -3,7 +3,7 @@ * 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.kotlinx.jso.compiler.fir +package org.jetbrains.kotlinx.jspo.compiler.fir import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.ClassKind @@ -12,10 +12,8 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol -import org.jetbrains.kotlin.fir.builder.createDataClassCopyFunction import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction -import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter @@ -37,27 +35,25 @@ import org.jetbrains.kotlin.fir.scopes.kotlinScopeProvider import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.toEffectiveVisibility -import org.jetbrains.kotlin.fir.types.coneTypeOrNull import org.jetbrains.kotlin.fir.types.isNullable import org.jetbrains.kotlin.fir.types.toFirResolvedTypeRef import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames -import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.ConstantValueKind import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.addToStdlib.runIf -import org.jetbrains.kotlinx.jso.compiler.fir.services.jsObjectPropertiesProvider -import org.jetbrains.kotlinx.jso.compiler.resolve.JsSimpleObjectPluginKey +import org.jetbrains.kotlinx.jspo.compiler.fir.services.jsPlainObjectPropertiesProvider +import org.jetbrains.kotlinx.jspo.compiler.resolve.JsPlainObjectsPluginKey /** - * The extension generate a synthetic factory and copy-method for an `external interface` annotated with @JsSimpleObject + * The extension generate a synthetic factory and copy-method for an `external interface` annotated with @JsPlainObjects * Imagine the next interfaces: * ``` * external interface User { * val name: String * } - * @JsSimpleObject + * @JsPlainObjects * external interface Admin { * val chat: Chat * } @@ -78,24 +74,24 @@ import org.jetbrains.kotlinx.jso.compiler.resolve.JsSimpleObjectPluginKey * } * ``` */ -class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { +class JsPlainObjectsFunctionsGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { private val predicateBasedProvider = session.predicateBasedProvider private val matchedInterfaces by lazy { - predicateBasedProvider.getSymbolsByPredicate(JsObjectPredicates.AnnotatedWithJsSimpleObject.LOOKUP) + predicateBasedProvider.getSymbolsByPredicate(JsPlainObjectsPredicates.AnnotatedWithJsPlainObject.LOOKUP) .filterIsInstance() .toSet() } - private val factoryFqNamesToJsObjectInterface by lazy { + private val factoryFqNamesToJsPlainObjectsInterface by lazy { matchedInterfaces.associateBy { it.classId.asSingleFqName() } } - private val FirClassLikeSymbol<*>.isJsObject: Boolean + private val FirClassLikeSymbol<*>.isJsPlainObject: Boolean get() = this is FirRegularClassSymbol && this in matchedInterfaces override fun getNestedClassifiersNames(classSymbol: FirClassSymbol<*>, context: NestedClassGenerationContext): Set { - return if (classSymbol.isJsObject) setOf(SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) else emptySet() + return if (classSymbol.isJsPlainObject) setOf(SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) else emptySet() } override fun generateNestedClassLikeDeclaration( @@ -105,7 +101,7 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration ): FirClassLikeSymbol<*>? { return if ( owner is FirRegularClassSymbol && - owner.isJsObject && + owner.isJsPlainObject && name == org.jetbrains.kotlin.name.SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT ) generateCompanionDeclaration(owner) else null @@ -117,7 +113,7 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration return buildRegularClass { resolvePhase = FirResolvePhase.BODY_RESOLVE moduleData = session.moduleData - origin = JsSimpleObjectPluginKey.origin + origin = JsPlainObjectsPluginKey.origin classKind = ClassKind.OBJECT scopeProvider = session.kotlinScopeProvider status = FirResolvedDeclarationStatusImpl( @@ -136,8 +132,8 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration override fun getCallableNamesForClass(classSymbol: FirClassSymbol<*>, context: MemberGenerationContext): Set { val outerClass = classSymbol.getContainingClassSymbol(session) return when { - classSymbol.isCompanion && outerClass?.isJsObject == true -> setOf(OperatorNameConventions.INVOKE) - classSymbol.isJsObject -> setOf(StandardNames.DATA_CLASS_COPY) + classSymbol.isCompanion && outerClass?.isJsPlainObject == true -> setOf(OperatorNameConventions.INVOKE) + classSymbol.isJsPlainObject -> setOf(StandardNames.DATA_CLASS_COPY) else -> emptySet() } } @@ -151,25 +147,25 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration return when (callableId.callableName) { StandardNames.DATA_CLASS_COPY -> { containingClass - ?.let { factoryFqNamesToJsObjectInterface[it.asSingleFqName()] } - ?.let { listOf(createJsObjectCopyFunction(callableId, context.owner, it).symbol) } ?: emptyList() + ?.let { factoryFqNamesToJsPlainObjectsInterface[it.asSingleFqName()] } + ?.let { listOf(createJsPlainObjectCopyFunction(callableId, context.owner, it).symbol) } ?: emptyList() } OperatorNameConventions.INVOKE -> { possibleInterface ?.takeIf { context.owner.isCompanion } - ?.let { factoryFqNamesToJsObjectInterface[it.asSingleFqName()] } - ?.let { listOf(createJsObjectFactoryFunction(callableId, context.owner, it).symbol) } ?: emptyList() + ?.let { factoryFqNamesToJsPlainObjectsInterface[it.asSingleFqName()] } + ?.let { listOf(createJsPlainObjectFactoryFunction(callableId, context.owner, it).symbol) } ?: emptyList() } else -> emptyList() } } - private fun createJsObjectFactoryFunction( + private fun createJsPlainObjectFactoryFunction( callableId: CallableId, parent: FirClassSymbol<*>, - jsSimpleObjectInterface: FirRegularClassSymbol, + jsPlainObjectInterface: FirRegularClassSymbol, ): FirSimpleFunction { - return createJsObjectFunction(callableId, parent, jsSimpleObjectInterface) { + return createJsPlainObjectsFunction(callableId, parent, jsPlainObjectInterface) { runIf(resolvedReturnTypeRef.type.isNullable) { buildConstExpression( source = null, @@ -181,21 +177,21 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration } } - private fun createJsObjectCopyFunction( + private fun createJsPlainObjectCopyFunction( callableId: CallableId, parent: FirClassSymbol<*>, - jsSimpleObjectInterface: FirRegularClassSymbol, + jsPlainObjectInterface: FirRegularClassSymbol, ): FirSimpleFunction { - val interfaceType = jsSimpleObjectInterface.defaultType() - return createJsObjectFunction(callableId, parent, jsSimpleObjectInterface) { + val interfaceType = jsPlainObjectInterface.defaultType() + return createJsPlainObjectsFunction(callableId, parent, jsPlainObjectInterface) { buildPropertyAccessExpression { dispatchReceiver = buildThisReceiverExpression { - calleeReference = buildImplicitThisReference { boundSymbol = jsSimpleObjectInterface } + calleeReference = buildImplicitThisReference { boundSymbol = jsPlainObjectInterface } coneTypeOrNull = interfaceType } calleeReference = buildResolvedNamedReference { - name = this@createJsObjectFunction.name - resolvedSymbol = this@createJsObjectFunction + name = this@createJsPlainObjectsFunction.name + resolvedSymbol = this@createJsPlainObjectsFunction } coneTypeOrNull = resolvedReturnType } @@ -203,40 +199,40 @@ class JsObjectFunctionsGenerator(session: FirSession) : FirDeclarationGeneration } @OptIn(SymbolInternals::class) - private fun createJsObjectFunction( + private fun createJsPlainObjectsFunction( callableId: CallableId, parent: FirClassSymbol<*>, - jsSimpleObjectInterface: FirRegularClassSymbol, + jsPlainObjectInterface: FirRegularClassSymbol, getParameterDefaultValueFromProperty: FirPropertySymbol.() -> FirExpression? ): FirSimpleFunction { - val jsSimpleObjectProperties = session.jsObjectPropertiesProvider.getJsObjectPropertiesForClass(jsSimpleObjectInterface) + val jsPlainObjectProperties = session.jsPlainObjectPropertiesProvider.getJsPlainObjectsPropertiesForClass(jsPlainObjectInterface) val functionTarget = FirFunctionTarget(null, isLambda = false) - val jsSimpleObjectInterfaceDefaultType = jsSimpleObjectInterface.defaultType() + val jsPlainObjectInterfaceDefaultType = jsPlainObjectInterface.defaultType() return buildSimpleFunction { - moduleData = jsSimpleObjectInterface.moduleData + moduleData = jsPlainObjectInterface.moduleData resolvePhase = FirResolvePhase.BODY_RESOLVE - origin = JsSimpleObjectPluginKey.origin + origin = JsPlainObjectsPluginKey.origin symbol = FirNamedFunctionSymbol(callableId) name = callableId.callableName - returnTypeRef = jsSimpleObjectInterfaceDefaultType.toFirResolvedTypeRef() + returnTypeRef = jsPlainObjectInterfaceDefaultType.toFirResolvedTypeRef() status = FirResolvedDeclarationStatusImpl( - jsSimpleObjectInterface.visibility, + jsPlainObjectInterface.visibility, Modality.FINAL, - jsSimpleObjectInterface.visibility.toEffectiveVisibility(parent, forClass = true) + jsPlainObjectInterface.visibility.toEffectiveVisibility(parent, forClass = true) ).apply { isInline = true isOperator = true } dispatchReceiverType = parent.defaultType() - jsSimpleObjectInterface.typeParameterSymbols.mapTo(typeParameters) { it.fir } - jsSimpleObjectProperties.mapTo(valueParameters) { + jsPlainObjectInterface.typeParameterSymbols.mapTo(typeParameters) { it.fir } + jsPlainObjectProperties.mapTo(valueParameters) { val typeRef = it.resolvedReturnTypeRef buildValueParameter { moduleData = session.moduleData - origin = JsSimpleObjectPluginKey.origin + origin = JsPlainObjectsPluginKey.origin returnTypeRef = typeRef name = it.name symbol = FirValueParameterSymbol(it.name) diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectPredicates.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsPredicates.kt similarity index 56% rename from plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectPredicates.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsPredicates.kt index f349d1519ba..bd787615962 100644 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectPredicates.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsPlainObjectsPredicates.kt @@ -2,16 +2,16 @@ * 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.kotlinx.jso.compiler.fir +package org.jetbrains.kotlinx.jspo.compiler.fir import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate import org.jetbrains.kotlin.fir.extensions.predicate.LookupPredicate -import org.jetbrains.kotlinx.jso.compiler.resolve.JsObjectAnnotations +import org.jetbrains.kotlinx.jspo.compiler.resolve.JsPlainObjectsAnnotations -object JsObjectPredicates { - internal object AnnotatedWithJsSimpleObject { - private val jsSimpleObjectAnnotation = setOf(JsObjectAnnotations.jsSimpleObjectAnnotationFqName) - internal val LOOKUP = LookupPredicate.create { annotated(jsSimpleObjectAnnotation) } - internal val DECLARATION = DeclarationPredicate.create { annotated(jsSimpleObjectAnnotation) } +object JsPlainObjectsPredicates { + internal object AnnotatedWithJsPlainObject { + private val jsPlainObjectAnnotation = setOf(JsPlainObjectsAnnotations.jsPlainObjectAnnotationFqName) + internal val LOOKUP = LookupPredicate.create { annotated(jsPlainObjectAnnotation) } + internal val DECLARATION = DeclarationPredicate.create { annotated(jsPlainObjectAnnotation) } } } diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoCheckersComponent.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsCheckersComponent.kt similarity index 76% rename from plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoCheckersComponent.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsCheckersComponent.kt index 7d57d0698ab..da24f988c90 100644 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoCheckersComponent.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsCheckersComponent.kt @@ -3,15 +3,15 @@ * 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.kotlinx.jso.compiler.fir.checkers +package org.jetbrains.kotlinx.jspo.compiler.fir.checkers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension -class FirJsoCheckersComponent(session: FirSession) : FirAdditionalCheckersExtension(session) { +class FirJsPlainObjectsCheckersComponent(session: FirSession) : FirAdditionalCheckersExtension(session) { override val declarationCheckers: DeclarationCheckers = object : DeclarationCheckers() { - override val classCheckers: Set = setOf(FirJsoPluginClassChecker) + override val classCheckers: Set = setOf(FirJsPlainObjectsPluginClassChecker) } } diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoErrors.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsErrors.kt similarity index 60% rename from plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoErrors.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsErrors.kt index 7c4db90d5f2..0a2ec5be7b3 100644 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoErrors.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsErrors.kt @@ -3,22 +3,20 @@ * 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.kotlinx.jso.compiler.fir.checkers +package org.jetbrains.kotlinx.jspo.compiler.fir.checkers import com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.* import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.fir.types.ConeKotlinType -import org.jetbrains.kotlin.psi.KtAnnotationEntry -object FirJsoErrors { +object FirJsPlainObjectsErrors { val NON_EXTERNAL_DECLARATIONS_NOT_SUPPORTED by error1() val ONLY_INTERFACES_ARE_SUPPORTED by error1() - val IMPLEMENTING_OF_JSO_IS_NOT_SUPPORTED by error1() + val IMPLEMENTING_OF_JS_PLAIN_OBJECT_IS_NOT_SUPPORTED by error1() + val METHODS_ARE_NOT_ALLOWED_INSIDE_JS_PLAIN_OBJECT by error0() + val JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS by error1() init { - RootDiagnosticRendererFactory.registerFactory(KtDefaultErrorMessagesJso) + RootDiagnosticRendererFactory.registerFactory(KtDefaultErrorMessagesJsPlainObjects) } } diff --git a/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsPluginClassChecker.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsPluginClassChecker.kt new file mode 100644 index 00000000000..17b586f88b3 --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsPlainObjectsPluginClassChecker.kt @@ -0,0 +1,105 @@ +/* + * 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.kotlinx.jspo.compiler.fir.checkers + +import org.jetbrains.kotlin.descriptors.ClassKind +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.FirClassChecker +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.hasAnnotation +import org.jetbrains.kotlin.fir.declarations.utils.isEffectivelyExternal +import org.jetbrains.kotlin.fir.declarations.utils.isInline +import org.jetbrains.kotlin.fir.declarations.utils.isInterface +import org.jetbrains.kotlin.fir.declarations.utils.isMethodOfAny +import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope +import org.jetbrains.kotlin.fir.scopes.processAllFunctions +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol +import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.types.isAny +import org.jetbrains.kotlin.fir.types.toRegularClassSymbol +import org.jetbrains.kotlinx.jspo.compiler.resolve.JsPlainObjectsAnnotations + +object FirJsPlainObjectsPluginClassChecker : FirClassChecker() { + override fun check(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { + with(context) { + val classSymbol = declaration.symbol as? FirRegularClassSymbol ?: return + + if (classSymbol.hasAnnotation(JsPlainObjectsAnnotations.jsPlainObjectAnnotationClassId, session)) { + checkJsPlainObjectAnnotationTargets(classSymbol, reporter) + checkJsPlainObjectSuperTypes(classSymbol, reporter) + checkJsPlainObjectMembers(classSymbol, reporter) + } else { + checkJsPlainObjectAsSuperInterface(classSymbol, reporter) + } + } + } + + context(CheckerContext) + private fun checkJsPlainObjectAnnotationTargets(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { + val classKind = classSymbol.classKind.codeRepresentation ?: error("Unexpected enum entry") + + if (!classSymbol.isEffectivelyExternal(session)) { + reporter.reportOn(classSymbol.source, FirJsPlainObjectsErrors.NON_EXTERNAL_DECLARATIONS_NOT_SUPPORTED, classKind) + return + } + if (!classSymbol.isInterface) { + reporter.reportOn(classSymbol.source, FirJsPlainObjectsErrors.ONLY_INTERFACES_ARE_SUPPORTED, classKind) + return + } + } + + context(CheckerContext) + private fun checkJsPlainObjectMembers(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { + if (!classSymbol.isEffectivelyExternal(session) || !classSymbol.isInterface) return + classSymbol + .declaredMemberScope(session, null) + .processAllFunctions { + if (!it.isMethodOfAny && !it.isInline) { + reporter.reportOn(it.source, FirJsPlainObjectsErrors.METHODS_ARE_NOT_ALLOWED_INSIDE_JS_PLAIN_OBJECT) + } + } + } + + context(CheckerContext) + private fun checkJsPlainObjectSuperTypes(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { + if (!classSymbol.isEffectivelyExternal(session) || !classSymbol.isInterface) return + classSymbol.resolvedSuperTypeRefs.forEach { superType -> + val superInterface = superType.coneType + .takeIf { !it.isAny } + ?.fullyExpandedType(session) + ?.toRegularClassSymbol(session) ?: return@forEach + + if (!superInterface.hasAnnotation(JsPlainObjectsAnnotations.jsPlainObjectAnnotationClassId, session)) { + reporter.reportOn( + superType.source, + FirJsPlainObjectsErrors.JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS, + classSymbol.classId.asFqNameString() + ) + } + } + } + + context(CheckerContext) + private fun checkJsPlainObjectAsSuperInterface(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { + classSymbol.resolvedSuperTypeRefs.forEach { + val superInterface = it.coneType.fullyExpandedType(session) + .toRegularClassSymbol(session) + ?.takeIf { it.classKind == ClassKind.INTERFACE } ?: return@forEach + + if (superInterface.hasAnnotation(JsPlainObjectsAnnotations.jsPlainObjectAnnotationClassId, session)) { + reporter.reportOn( + it.source, + FirJsPlainObjectsErrors.IMPLEMENTING_OF_JS_PLAIN_OBJECT_IS_NOT_SUPPORTED, + classSymbol.classId.asFqNameString() + ) + } + } + } +} diff --git a/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt new file mode 100644 index 00000000000..759c145a16d --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt @@ -0,0 +1,30 @@ +/* + * 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.kotlinx.jspo.compiler.fir.checkers + +import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryToRendererMap +import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory +import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers + +object KtDefaultErrorMessagesJsPlainObjects : BaseDiagnosticRendererFactory() { + override val MAP = KtDiagnosticFactoryToRendererMap("JsPlainObjects").apply { + put( + FirJsPlainObjectsErrors.NON_EXTERNAL_DECLARATIONS_NOT_SUPPORTED, + "Non-external {0} can not be annotated with JsPlainObjects. Only external interfaces are supported.", + CommonRenderers.STRING + ) + put( + FirJsPlainObjectsErrors.ONLY_INTERFACES_ARE_SUPPORTED, + "External {0} can not be annotated with JsPlainObjects. Only external interfaces are supported.", + CommonRenderers.STRING + ) + put( + FirJsPlainObjectsErrors.IMPLEMENTING_OF_JS_PLAIN_OBJECT_IS_NOT_SUPPORTED, + "[{0}] is marked as JsPlainObjects, so, it can not be used as a super-type for non-JsPlainObjects declarations", + CommonRenderers.STRING + ) + } +} diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsSimpleObjectPropertiesProvider.kt b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsPlainObjectsPropertiesProvider.kt similarity index 71% rename from plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsSimpleObjectPropertiesProvider.kt rename to plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsPlainObjectsPropertiesProvider.kt index df5cb35492a..73ffce6700f 100644 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsSimpleObjectPropertiesProvider.kt +++ b/plugins/js-plain-objects/compiler-plugin/js-plain-objects.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/services/JsPlainObjectsPropertiesProvider.kt @@ -3,7 +3,7 @@ * 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.kotlinx.jso.compiler.fir.services +package org.jetbrains.kotlinx.jspo.compiler.fir.services import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Visibilities @@ -23,23 +23,23 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.toRegularClassSymbol import org.jetbrains.kotlin.utils.addIfNotNull -import org.jetbrains.kotlinx.jso.compiler.fir.JsObjectPredicates -import org.jetbrains.kotlinx.jso.compiler.resolve.JsObjectAnnotations +import org.jetbrains.kotlinx.jspo.compiler.fir.JsPlainObjectsPredicates +import org.jetbrains.kotlinx.jspo.compiler.resolve.JsPlainObjectsAnnotations -class JsSimpleObjectPropertiesProvider(session: FirSession) : FirExtensionSessionComponent(session) { +class JsPlainObjectsPropertiesProvider(session: FirSession) : FirExtensionSessionComponent(session) { private val cache: FirCache, List, Nothing?> = - session.firCachesFactory.createCache(this::createJsSimpleObjectProperties) + session.firCachesFactory.createCache(this::createJsPlainObjectProperties) override fun FirDeclarationPredicateRegistrar.registerPredicates() { - register(JsObjectPredicates.AnnotatedWithJsSimpleObject.DECLARATION) + register(JsPlainObjectsPredicates.AnnotatedWithJsPlainObject.DECLARATION) } - fun getJsObjectPropertiesForClass(classSymbol: FirClassSymbol<*>): List { + fun getJsPlainObjectsPropertiesForClass(classSymbol: FirClassSymbol<*>): List { return cache.getValue(classSymbol) } - private fun createJsSimpleObjectProperties(classSymbol: FirClassSymbol<*>): List = - if (!classSymbol.hasAnnotation(JsObjectAnnotations.jsSimpleObjectAnnotationClassId, session)) { + private fun createJsPlainObjectProperties(classSymbol: FirClassSymbol<*>): List = + if (!classSymbol.hasAnnotation(JsPlainObjectsAnnotations.jsPlainObjectAnnotationClassId, session)) { emptyList() } else { buildList { @@ -48,7 +48,7 @@ class JsSimpleObjectPropertiesProvider(session: FirSession) : FirExtensionSessio .toRegularClassSymbol(session) ?.takeIf { it.classKind == ClassKind.INTERFACE } ?: return@forEach - val superInterfaceSimpleObjectProperties = createJsSimpleObjectProperties(superInterface) + val superInterfaceSimpleObjectProperties = createJsPlainObjectProperties(superInterface) superInterfaceSimpleObjectProperties.forEach(::addIfNotNull) } @@ -61,4 +61,4 @@ class JsSimpleObjectPropertiesProvider(session: FirSession) : FirExtensionSessio } } -val FirSession.jsObjectPropertiesProvider: JsSimpleObjectPropertiesProvider by FirSession.sessionComponentAccessor() \ No newline at end of file +val FirSession.jsPlainObjectPropertiesProvider: JsPlainObjectsPropertiesProvider by FirSession.sessionComponentAccessor() \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/testData/box/copy.kt b/plugins/js-plain-objects/compiler-plugin/testData/box/copy.kt similarity index 92% rename from plugins/jso/compiler-plugin/testData/box/copy.kt rename to plugins/js-plain-objects/compiler-plugin/testData/box/copy.kt index 29586b8233d..18af25e2234 100644 --- a/plugins/jso/compiler-plugin/testData/box/copy.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/box/copy.kt @@ -1,8 +1,8 @@ package foo -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject external interface User { var name: String val age: Int diff --git a/plugins/jso/compiler-plugin/testData/box/optional.kt b/plugins/js-plain-objects/compiler-plugin/testData/box/optional.kt similarity index 95% rename from plugins/jso/compiler-plugin/testData/box/optional.kt rename to plugins/js-plain-objects/compiler-plugin/testData/box/optional.kt index 4d8f8c09ca0..f222c0d42f8 100644 --- a/plugins/jso/compiler-plugin/testData/box/optional.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/box/optional.kt @@ -1,8 +1,8 @@ package foo -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject external interface User { var name: String val age: Int diff --git a/plugins/jso/compiler-plugin/testData/box/simple.kt b/plugins/js-plain-objects/compiler-plugin/testData/box/simple.kt similarity index 89% rename from plugins/jso/compiler-plugin/testData/box/simple.kt rename to plugins/js-plain-objects/compiler-plugin/testData/box/simple.kt index ac86451cf41..c5926b0c539 100644 --- a/plugins/jso/compiler-plugin/testData/box/simple.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/box/simple.kt @@ -1,8 +1,8 @@ package foo -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject external interface User { var name: String val age: Int diff --git a/plugins/jso/compiler-plugin/testData/box/with-inheritance.kt b/plugins/js-plain-objects/compiler-plugin/testData/box/with-inheritance.kt similarity index 90% rename from plugins/jso/compiler-plugin/testData/box/with-inheritance.kt rename to plugins/js-plain-objects/compiler-plugin/testData/box/with-inheritance.kt index 8da2dca6b31..ae209b1264c 100644 --- a/plugins/jso/compiler-plugin/testData/box/with-inheritance.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/box/with-inheritance.kt @@ -1,14 +1,14 @@ package foo -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject external interface User { var name: String val age: Int } -@JsSimpleObject +@JsPlainObject external interface ExtendedUser : User { val email: String } diff --git a/plugins/jso/compiler-plugin/testData/box/with-multiple-inheritance.kt b/plugins/js-plain-objects/compiler-plugin/testData/box/with-multiple-inheritance.kt similarity index 90% rename from plugins/jso/compiler-plugin/testData/box/with-multiple-inheritance.kt rename to plugins/js-plain-objects/compiler-plugin/testData/box/with-multiple-inheritance.kt index b873ec9bbee..d2ea5b99c38 100644 --- a/plugins/jso/compiler-plugin/testData/box/with-multiple-inheritance.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/box/with-multiple-inheritance.kt @@ -1,19 +1,19 @@ package foo -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject external interface User { var name: String val age: Int } -@JsSimpleObject +@JsPlainObject external interface Role { val role: String } -@JsSimpleObject +@JsPlainObject external interface ExtendedUser : User, Role { val email: String } diff --git a/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/inheritance.kt b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/inheritance.kt new file mode 100644 index 00000000000..816aa2b72e3 --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/inheritance.kt @@ -0,0 +1,27 @@ +// FIR_IDENTICAL +// SKIP_TXT + +// FILE: test.kt +import kotlinx.js.JsPlainObject + +external interface A + +external interface B + +external interface C + +@JsPlainObject +external interface D : A, B, C + +@JsPlainObject +external interface E + +@JsPlainObject +external interface F + +@JsPlainObject +external interface DEF: D, E, F + +external interface G: A, C, E + +class Foo : A, D, B diff --git a/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/only-properties.kt b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/only-properties.kt new file mode 100644 index 00000000000..25f75e94009 --- /dev/null +++ b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/only-properties.kt @@ -0,0 +1,15 @@ +// FIR_IDENTICAL +// SKIP_TXT + +// FILE: test.kt +import kotlinx.js.JsPlainObject + +@JsPlainObject +external interface Foo { + val foo: String + val bar: Int? + val fn: () -> String + val fnOptional: (() -> String)? + + fun test(): String +} diff --git a/plugins/jso/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt similarity index 53% rename from plugins/jso/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt rename to plugins/js-plain-objects/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt index 0ea4ac96ec6..9ccbfdf8b64 100644 --- a/plugins/jso/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt +++ b/plugins/js-plain-objects/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt @@ -2,27 +2,27 @@ // SKIP_TXT // FILE: test.kt -import kotlinx.jso.JsSimpleObject +import kotlinx.js.JsPlainObject -@JsSimpleObject +@JsPlainObject class Regular1 -@JsSimpleObject +@JsPlainObject object Regular2 -@JsSimpleObject +@JsPlainObject enum class Regular3 -@JsSimpleObject +@JsPlainObject external class External1 -@JsSimpleObject +@JsPlainObject external object External2 -@JsSimpleObject +@JsPlainObject external interface External3 external class Nested { - @JsSimpleObject + @JsPlainObject interface Inner } \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/FirJsObjectIrJsBoxTestGenerated.java b/plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsIrJsBoxTestGenerated.java similarity index 57% rename from plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/FirJsObjectIrJsBoxTestGenerated.java rename to plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsIrJsBoxTestGenerated.java index 6750d791daa..2ad9e39355c 100644 --- a/plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/FirJsObjectIrJsBoxTestGenerated.java +++ b/plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsIrJsBoxTestGenerated.java @@ -3,7 +3,7 @@ * 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.kotlinx.jso.runners; +package org.jetbrains.kotlinx.jspo.runners; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; @@ -15,43 +15,43 @@ import org.junit.jupiter.api.Test; import java.io.File; import java.util.regex.Pattern; -/** This class is generated by {@link org.jetbrains.kotlinx.jso.TestGeneratorKt}. DO NOT MODIFY MANUALLY */ +/** This class is generated by {@link org.jetbrains.kotlinx.jspo.TestGeneratorKt}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") -@TestMetadata("plugins/jso/compiler-plugin/testData/box") +@TestMetadata("plugins/js-plain-objects/compiler-plugin/testData/box") @TestDataPath("$PROJECT_ROOT") -public class FirJsObjectIrJsBoxTestGenerated extends AbstractFirJsObjectIrJsBoxTest { +public class FirJsPlainObjectsIrJsBoxTestGenerated extends AbstractFirJsPlainObjectsIrJsBoxTest { @Test public void testAllFilesPresentInBox() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/jso/compiler-plugin/testData/box"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/js-plain-objects/compiler-plugin/testData/box"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } @Test @TestMetadata("copy.kt") public void testCopy() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/box/copy.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/box/copy.kt"); } @Test @TestMetadata("optional.kt") public void testOptional() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/box/optional.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/box/optional.kt"); } @Test @TestMetadata("simple.kt") public void testSimple() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/box/simple.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/box/simple.kt"); } @Test @TestMetadata("with-inheritance.kt") public void testWith_inheritance() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/box/with-inheritance.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/box/with-inheritance.kt"); } @Test @TestMetadata("with-multiple-inheritance.kt") public void testWith_multiple_inheritance() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/box/with-multiple-inheritance.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/box/with-multiple-inheritance.kt"); } } diff --git a/plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/JsObjectPluginDiagnosticTestGenerated.java b/plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsPluginDiagnosticTestGenerated.java similarity index 50% rename from plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/JsObjectPluginDiagnosticTestGenerated.java rename to plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsPluginDiagnosticTestGenerated.java index ded2014e823..b119912d794 100644 --- a/plugins/jso/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jso/runners/JsObjectPluginDiagnosticTestGenerated.java +++ b/plugins/js-plain-objects/compiler-plugin/tests-gen/org/jetbrains/kotlinx/jspo/runners/FirJsPlainObjectsPluginDiagnosticTestGenerated.java @@ -3,7 +3,7 @@ * 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.kotlinx.jso.runners; +package org.jetbrains.kotlinx.jspo.runners; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; @@ -14,25 +14,31 @@ import org.junit.jupiter.api.Test; import java.io.File; import java.util.regex.Pattern; -/** This class is generated by {@link org.jetbrains.kotlinx.jso.TestGeneratorKt}. DO NOT MODIFY MANUALLY */ +/** This class is generated by {@link org.jetbrains.kotlinx.jspo.TestGeneratorKt}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") -@TestMetadata("plugins/jso/compiler-plugin/testData/diagnostics") +@TestMetadata("plugins/js-plain-objects/compiler-plugin/testData/diagnostics") @TestDataPath("$PROJECT_ROOT") -public class JsObjectPluginDiagnosticTestGenerated extends AbstractJsObjectPluginDiagnosticTest { +public class FirJsPlainObjectsPluginDiagnosticTestGenerated extends AbstractFirJsPlainObjectsPluginDiagnosticTest { @Test public void testAllFilesPresentInDiagnostics() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/jso/compiler-plugin/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/js-plain-objects/compiler-plugin/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); } @Test @TestMetadata("inheritance.kt") public void testInheritance() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/diagnostics/inheritance.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/diagnostics/inheritance.kt"); + } + + @Test + @TestMetadata("only-properties.kt") + public void testOnly_properties() throws Exception { + runTest("plugins/js-plain-objects/compiler-plugin/testData/diagnostics/only-properties.kt"); } @Test @TestMetadata("wrongAnnotationTarget.kt") public void testWrongAnnotationTarget() throws Exception { - runTest("plugins/jso/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt"); + runTest("plugins/js-plain-objects/compiler-plugin/testData/diagnostics/wrongAnnotationTarget.kt"); } } diff --git a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt similarity index 59% rename from plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt rename to plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt index bf6a8ba9585..67c045fe60f 100644 --- a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt +++ b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/TestGenerator.kt @@ -3,26 +3,26 @@ * 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.kotlinx.jso +package org.jetbrains.kotlinx.jspo import org.jetbrains.kotlin.generators.generateTestGroupSuiteWithJUnit5 -import org.jetbrains.kotlinx.jso.runners.AbstractFirJsObjectIrJsBoxTest -import org.jetbrains.kotlinx.jso.runners.AbstractJsObjectPluginDiagnosticTest +import org.jetbrains.kotlinx.jspo.runners.AbstractFirJsPlainObjectsIrJsBoxTest +import org.jetbrains.kotlinx.jspo.runners.AbstractFirJsPlainObjectsPluginDiagnosticTest fun main(args: Array) { generateTestGroupSuiteWithJUnit5(args) { testGroup( - "plugins/jso/compiler-plugin/tests-gen", - "plugins/jso/compiler-plugin/testData" + "plugins/js-plain-objects/compiler-plugin/tests-gen", + "plugins/js-plain-objects/compiler-plugin/testData" ) { // ------------------------------- diagnostics ------------------------------- - testClass() { + testClass() { model("diagnostics") } // ------------------------------- box ------------------------------- - testClass { + testClass { model("box") } } diff --git a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt similarity index 61% rename from plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt rename to plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt index 7e50f96f99e..4d47e09af01 100644 --- a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt +++ b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/jsObjectConfiguration.kt @@ -3,7 +3,7 @@ * 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.kotlinx.jso.runners +package org.jetbrains.kotlinx.jspo.runners import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.config.CompilerConfiguration @@ -12,25 +12,25 @@ import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.EnvironmentConfigurator import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider import org.jetbrains.kotlin.test.services.TestServices -import org.jetbrains.kotlinx.jso.compiler.cli.JsObjectComponentRegistrar +import org.jetbrains.kotlinx.jspo.compiler.cli.JsPlainObjectsComponentRegistrar import java.io.File -class JsObjectEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { +class JsPlainObjectsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions( module: TestModule, configuration: CompilerConfiguration ) { - JsObjectComponentRegistrar.registerExtensions(this) + JsPlainObjectsComponentRegistrar.registerExtensions(this) } } -class JsObjectRuntimeClasspathProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { +class JsPlainObjectsRuntimeClasspathProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { override fun runtimeClassPaths(module: TestModule): List { return listOf(File(System.getProperty("jso.runtime.path"))) } } -fun TestConfigurationBuilder.configureForKotlinxJsObject() { - useConfigurators(::JsObjectEnvironmentConfigurator) - useCustomRuntimeClasspathProviders(::JsObjectRuntimeClasspathProvider) +fun TestConfigurationBuilder.configureForKotlinxJsPlainObjects() { + useConfigurators(::JsPlainObjectsEnvironmentConfigurator) + useCustomRuntimeClasspathProviders(::JsPlainObjectsRuntimeClasspathProvider) } diff --git a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt similarity index 73% rename from plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt rename to plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt index 002651e018f..7e1d2d36976 100644 --- a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt +++ b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/BoxTests.kt @@ -3,18 +3,17 @@ * 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.kotlinx.jso.runners +package org.jetbrains.kotlinx.jspo.runners import org.jetbrains.kotlin.js.test.fir.AbstractFirJsTest -import org.jetbrains.kotlin.js.test.ir.AbstractJsIrTest import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder -open class AbstractFirJsObjectIrJsBoxTest : AbstractFirJsTest( +open class AbstractFirJsPlainObjectsIrJsBoxTest : AbstractFirJsTest( pathToTestDir = "plugins/kotlinx-serialization/testData/boxIr/", testGroupOutputDirPrefix = "codegen/serializationBoxIr/" ) { override fun configure(builder: TestConfigurationBuilder) { super.configure(builder) - builder.configureForKotlinxJsObject() + builder.configureForKotlinxJsPlainObjects() } } \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt similarity index 78% rename from plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt rename to plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt index a71955e94cf..f0b6030a0c4 100644 --- a/plugins/jso/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt +++ b/plugins/js-plain-objects/compiler-plugin/tests/org/jetbrains/kotlinx/jso/runners/DiagnosticTests.kt @@ -3,18 +3,16 @@ * 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.kotlinx.jso.runners +package org.jetbrains.kotlinx.jspo.runners -import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.runners.AbstractFirPsiDiagnosticTest -import org.jetbrains.kotlin.test.runners.configurationForClassicAndFirTestsAlongside -abstract class AbstractJsObjectPluginDiagnosticTest : AbstractFirPsiDiagnosticTest() { +abstract class AbstractFirJsPlainObjectsPluginDiagnosticTest : AbstractFirPsiDiagnosticTest() { override fun configure(builder: TestConfigurationBuilder) { super.configure(builder) with(builder) { @@ -24,7 +22,7 @@ abstract class AbstractJsObjectPluginDiagnosticTest : AbstractFirPsiDiagnosticTe dependencyKind = DependencyKind.Source } - configureForKotlinxJsObject() + configureForKotlinxJsPlainObjects() disableOptInErrors() } } diff --git a/plugins/jso/runtime/build.gradle.kts b/plugins/js-plain-objects/runtime/build.gradle.kts similarity index 67% rename from plugins/jso/runtime/build.gradle.kts rename to plugins/js-plain-objects/runtime/build.gradle.kts index 61ba76084cb..c43b3d178c5 100644 --- a/plugins/jso/runtime/build.gradle.kts +++ b/plugins/js-plain-objects/runtime/build.gradle.kts @@ -1,14 +1,14 @@ import plugins.configureDefaultPublishing import plugins.configureKotlinPomAttributes -description = "Runtime library for the JSO compiler plugin" +description = "Runtime library for the JS Plain Objects compiler plugin" plugins { kotlin("js") `maven-publish` } -group = "org.jetbrains.kotlinx" +group = "org.jetbrains.kotlin" kotlin { js { @@ -26,17 +26,17 @@ val emptyJavadocJar by tasks.registering(Jar::class) { archiveClassifier.set("javadoc") } +configureDefaultPublishing() + publishing { publications { create("maven") { - artifactId = "jso" + artifactId = "kotlin-js-plain-objects" from(components["kotlin"]) - configureKotlinPomAttributes(project, "Runtime library for the JSO compiler plugin", packaging = "klib") + configureKotlinPomAttributes(project, "Annotations library for the JS Plain Objects compiler plugin", packaging = "klib") } withType { artifact(emptyJavadocJar) } } -} - -configureDefaultPublishing() \ No newline at end of file +} \ No newline at end of file diff --git a/plugins/jso/runtime/src/main/kotlin/jso.kt b/plugins/js-plain-objects/runtime/src/main/kotlin/JsPlainObject.kt similarity index 82% rename from plugins/jso/runtime/src/main/kotlin/jso.kt rename to plugins/js-plain-objects/runtime/src/main/kotlin/JsPlainObject.kt index 430774cca55..a3f28f51340 100644 --- a/plugins/jso/runtime/src/main/kotlin/jso.kt +++ b/plugins/js-plain-objects/runtime/src/main/kotlin/JsPlainObject.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package kotlinx.jso +package kotlinx.js @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) -public annotation class JsSimpleObject \ No newline at end of file +public annotation class JsPlainObject \ No newline at end of file diff --git a/plugins/jso/compiler-plugin-embeddable/build.gradle.kts b/plugins/jso/compiler-plugin-embeddable/build.gradle.kts deleted file mode 100644 index 95875d08434..00000000000 --- a/plugins/jso/compiler-plugin-embeddable/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -plugins { - id("org.jetbrains.kotlin.jvm") -} - -dependencies { - embedded(project(":plugins:jso:compiler-plugin")) { isTransitive = false } -} - -publish { - artifactId = "kotlinx-jso-compiler-plugin-embeddable" -} - -runtimeJar(rewriteDefaultJarDepsToShadedCompiler()) -sourcesJarWithSourcesFromEmbedded( - project(":plugins:jso:compiler-plugin").tasks.named("sourcesJar") -) -javadocJarWithJavadocFromEmbedded( - project(":plugins:jso:compiler-plugin").tasks.named("javadocJar") -) diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectExtensionRegistrar.kt b/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectExtensionRegistrar.kt deleted file mode 100644 index b80cac4d20b..00000000000 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/JsObjectExtensionRegistrar.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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.kotlinx.jso.compiler.fir - -import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar -import org.jetbrains.kotlinx.jso.compiler.fir.checkers.FirJsoCheckersComponent -import org.jetbrains.kotlinx.jso.compiler.fir.services.JsSimpleObjectPropertiesProvider - -class JsObjectExtensionRegistrar : FirExtensionRegistrar() { - override fun ExtensionRegistrarContext.configurePlugin() { - +::FirJsoCheckersComponent - +::JsObjectFunctionsGenerator - // services - +::JsSimpleObjectPropertiesProvider - } -} \ No newline at end of file diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoPluginClassChecker.kt b/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoPluginClassChecker.kt deleted file mode 100644 index 72230e080f0..00000000000 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/FirJsoPluginClassChecker.kt +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.kotlinx.jso.compiler.fir.checkers - -import org.jetbrains.kotlin.descriptors.ClassKind -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.FirClassChecker -import org.jetbrains.kotlin.fir.declarations.FirClass -import org.jetbrains.kotlin.fir.declarations.hasAnnotation -import org.jetbrains.kotlin.fir.declarations.utils.isEffectivelyExternal -import org.jetbrains.kotlin.fir.declarations.utils.isExternal -import org.jetbrains.kotlin.fir.declarations.utils.isInterface -import org.jetbrains.kotlin.fir.resolve.fullyExpandedType -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.fir.types.coneType -import org.jetbrains.kotlin.fir.types.toRegularClassSymbol -import org.jetbrains.kotlinx.jso.compiler.resolve.JsObjectAnnotations - -object FirJsoPluginClassChecker : FirClassChecker() { - override fun check(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { - with(context) { - val classSymbol = declaration.symbol as? FirRegularClassSymbol ?: return - - if (classSymbol.hasAnnotation(JsObjectAnnotations.jsSimpleObjectAnnotationClassId, session)) { - checkJsoAnnotationTargets(classSymbol, reporter) - } else { - checkJsoSuperInterfaces(classSymbol, reporter) - } - } - } - - context(CheckerContext) - private fun checkJsoAnnotationTargets(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { - val classKind = classSymbol.classKind.codeRepresentation ?: error("Unexpected enum entry") - - if (!classSymbol.isEffectivelyExternal(session)) { - reporter.reportOn(classSymbol.source, FirJsoErrors.NON_EXTERNAL_DECLARATIONS_NOT_SUPPORTED, classKind) - return - } - if (!classSymbol.isInterface) { - reporter.reportOn(classSymbol.source, FirJsoErrors.ONLY_INTERFACES_ARE_SUPPORTED, classKind) - return - } - } - - context(CheckerContext) - private fun checkJsoSuperInterfaces(classSymbol: FirClassSymbol, reporter: DiagnosticReporter) { - classSymbol.resolvedSuperTypeRefs.forEach { - val superInterface = it.coneType.fullyExpandedType(session) - .toRegularClassSymbol(session) - ?.takeIf { it.classKind == ClassKind.INTERFACE } ?: return@forEach - - if (superInterface.hasAnnotation(JsObjectAnnotations.jsSimpleObjectAnnotationClassId, session)) { - reporter.reportOn( - it.source, - FirJsoErrors.IMPLEMENTING_OF_JSO_IS_NOT_SUPPORTED, - classSymbol.classId.asFqNameString() - ) - } - } - } -} diff --git a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt b/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt deleted file mode 100644 index f625581d13f..00000000000 --- a/plugins/jso/compiler-plugin/jso.k2/src/org/jetbrains/kotlinx/jso/compiler/fir/checkers/KtDefaultErrorMessagesJso.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.kotlinx.jso.compiler.fir.checkers - -import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryToRendererMap -import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory -import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers - -object KtDefaultErrorMessagesJso : BaseDiagnosticRendererFactory() { - override val MAP = KtDiagnosticFactoryToRendererMap("JsSimpleObject").apply { - put( - FirJsoErrors.NON_EXTERNAL_DECLARATIONS_NOT_SUPPORTED, - "Non-external {0} can not be annotated with JsSimpleObject. Only external interfaces are supported.", - CommonRenderers.STRING - ) - put( - FirJsoErrors.ONLY_INTERFACES_ARE_SUPPORTED, - "External {0} can not be annotated with JsSimpleObject. Only external interfaces are supported.", - CommonRenderers.STRING - ) - put( - FirJsoErrors.IMPLEMENTING_OF_JSO_IS_NOT_SUPPORTED, - "[{0}] is marked as JsSimpleObject, so, it can not be used as a super-type for non-JsSimpleObject declarations", - CommonRenderers.STRING - ) - } -} diff --git a/plugins/jso/compiler-plugin/testData/diagnostics/inheritance.kt b/plugins/jso/compiler-plugin/testData/diagnostics/inheritance.kt deleted file mode 100644 index 2680ffac8d6..00000000000 --- a/plugins/jso/compiler-plugin/testData/diagnostics/inheritance.kt +++ /dev/null @@ -1,27 +0,0 @@ -// FIR_IDENTICAL -// SKIP_TXT - -// FILE: test.kt -import kotlinx.jso.JsSimpleObject - -external interface A - -external interface B - -external interface C - -@JsSimpleObject -external interface D : A, B, C - -@JsSimpleObject -external interface E - -@JsSimpleObject -external interface F - -@JsSimpleObject -external interface DEF: D, E, F - -external interface G: A, C, E - -class Foo : A, D, B diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/jso/jso.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/js-plain-objects/js-plain-objects.pom similarity index 99% rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/jso/jso.pom rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/js-plain-objects/js-plain-objects.pom index 6c9a5615f09..b455aac798a 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/jso/jso.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/js-plain-objects/js-plain-objects.pom @@ -7,10 +7,10 @@ 4.0.0 org.jetbrains.kotlin - jso + js-plain-objects ArtifactsTest.version - Jso - Jso + Js Plain Objects + Js Plain Objects https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-js-plain-objects/kotlin-js-plain-objects.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-js-plain-objects/kotlin-js-plain-objects.pom new file mode 100644 index 00000000000..f5620a0ad75 --- /dev/null +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-js-plain-objects/kotlin-js-plain-objects.pom @@ -0,0 +1,35 @@ + + + + + + + + 4.0.0 + org.jetbrains.kotlin + kotlin-js-plain-objects + ArtifactsTest.version + klib + Kotlin Js Plain Objects + Annotations library for the JS Plain Objects compiler plugin + https://kotlinlang.org/ + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + Kotlin Team + JetBrains + https://www.jetbrains.com + + + + scm:git:https://github.com/JetBrains/kotlin.git + scm:git:https://github.com/JetBrains/kotlin.git + https://github.com/JetBrains/kotlin + + diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-jso-compiler-plugin-embeddable/kotlinx-jso-compiler-plugin-embeddable.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin-embeddable/kotlinx-js-plain-objects-compiler-plugin-embeddable.pom similarity index 93% rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-jso-compiler-plugin-embeddable/kotlinx-jso-compiler-plugin-embeddable.pom rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin-embeddable/kotlinx-js-plain-objects-compiler-plugin-embeddable.pom index 2b24903ff97..bbd9a3ea0ea 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-jso-compiler-plugin-embeddable/kotlinx-jso-compiler-plugin-embeddable.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin-embeddable/kotlinx-js-plain-objects-compiler-plugin-embeddable.pom @@ -2,7 +2,7 @@ 4.0.0 org.jetbrains.kotlin - kotlinx-jso-compiler-plugin-embeddable + kotlinx-js-plain-objects-compiler-plugin-embeddable ArtifactsTest.version Compiler Plugin Embeddable Compiler Plugin Embeddable diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/compiler-plugin/compiler-plugin.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin/kotlinx-js-plain-objects-compiler-plugin.pom similarity index 88% rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/compiler-plugin/compiler-plugin.pom rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin/kotlinx-js-plain-objects-compiler-plugin.pom index 76435ea73cd..ae35bb424ab 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/compiler-plugin/compiler-plugin.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlinx-js-plain-objects-compiler-plugin/kotlinx-js-plain-objects-compiler-plugin.pom @@ -2,10 +2,10 @@ 4.0.0 org.jetbrains.kotlin - compiler-plugin + kotlinx-js-plain-objects-compiler-plugin ArtifactsTest.version Compiler Plugin - JavaScript Object Compiler Plugin + JavaScript Plain Objects Compiler Plugin https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/jso/org.jetbrains.kotlin.plugin.jso.gradle.plugin/org.jetbrains.kotlin.plugin.jso.gradle.plugin.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/js-plain-objects/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin.pom similarity index 77% rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/jso/org.jetbrains.kotlin.plugin.jso.gradle.plugin/org.jetbrains.kotlin.plugin.jso.gradle.plugin.pom rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/js-plain-objects/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin.pom index 5f648962a80..55feaecb7bc 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/jso/org.jetbrains.kotlin.plugin.jso.gradle.plugin/org.jetbrains.kotlin.plugin.jso.gradle.plugin.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/plugin/js-plain-objects/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin/org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin.pom @@ -1,12 +1,12 @@ 4.0.0 - org.jetbrains.kotlin.plugin.jso - org.jetbrains.kotlin.plugin.jso.gradle.plugin + org.jetbrains.kotlin.plugin.js-plain-objects + org.jetbrains.kotlin.plugin.js-plain-objects.gradle.plugin ArtifactsTest.version pom - Kotlin compiler plugin for kotlinx.jso library - Kotlin compiler plugin for kotlinx.jso library + Kotlin compiler plugin for typed JS-objects library + Kotlin compiler plugin for typed JS-objects library https://kotlinlang.org/ @@ -29,7 +29,7 @@ org.jetbrains.kotlin - jso + js-plain-objects ArtifactsTest.version diff --git a/settings.gradle b/settings.gradle index b4a8de4145f..9b8ce3a3510 100644 --- a/settings.gradle +++ b/settings.gradle @@ -283,16 +283,16 @@ include ":kotlin-atomicfu-compiler-plugin", ":kotlinx-atomicfu-runtime", ":atomicfu" -include ":plugins:jso:compiler-plugin", - ":plugins:jso:compiler-plugin-embeddable", - ":plugins:jso:compiler-plugin:jso.common", - ":plugins:jso:compiler-plugin:jso.k2", - ":plugins:jso:compiler-plugin:jso.backend", - ":plugins:jso:compiler-plugin:jso.cli" +include ":plugins:js-plain-objects:compiler-plugin", + ":plugins:js-plain-objects:compiler-plugin-embeddable", + ":plugins:js-plain-objects:compiler-plugin:js-plain-objects.common", + ":plugins:js-plain-objects:compiler-plugin:js-plain-objects.k2", + ":plugins:js-plain-objects:compiler-plugin:js-plain-objects.backend", + ":plugins:js-plain-objects:compiler-plugin:js-plain-objects.cli" if (!buildProperties.inJpsBuildIdeaSync) { - include ":plugins:jso:runtime", - ":libraries:tools:jso" + include ":plugins:js-plain-objects:runtime", + ":libraries:tools:js-plain-objects" } include ":compiler:fir",