From c0a314055617ecfc02ddd32902495a7ec8bfad0a Mon Sep 17 00:00:00 2001 From: Jolan Rensen Date: Fri, 22 Mar 2024 15:55:55 +0100 Subject: [PATCH] Added gradle plugin and fixed package naming errors --- build.gradle.kts | 13 ++-- buildSrc/build.gradle.kts | 4 +- buildSrc/src/main/kotlin/Dependencies.kt | 3 +- buildSrc/src/main/kotlin/Helpers.kt | 11 +++- buildSrc/src/main/kotlin/Plugins.kt | 5 ++ buildSrc/src/main/kotlin/Projects.kt | 2 +- buildSrc/src/main/kotlin/Versions.kt | 6 +- compiler-plugin/build.gradle.kts | 29 ++++++--- .../compilerPlugin/SimplePluginRegistrar.kt | 2 +- .../SparkifyCommandLineProcessor.kt | 4 +- .../SparkifyCompilerPluginRegistrar.kt | 6 +- .../DataClassPropertyAnnotationGenerator.kt | 2 +- .../ir/SparkifyIrGenerationExtension.kt | 3 +- ...otlin.compiler.plugin.CommandLineProcessor | 2 +- ...in.compiler.plugin.CompilerPluginRegistrar | 2 +- .../runners/BoxTestGenerated.java | 4 +- .../{ => api}/compilerPlugin/GenerateTests.kt | 6 +- .../compilerPlugin/runners/AbstractBoxTest.kt | 2 +- .../runners/AbstractDiagnosticTest.kt | 5 +- .../compilerPlugin/runners/BaseTestRunner.kt | 4 +- .../ExtensionRegistrarConfigurator.kt | 4 +- examples/build.gradle.kts | 20 ++++-- gradle-plugin/build.gradle.kts | 61 ++++++++++++++++++ .../SparkKotlinCompilerExtension.kt | 31 +++++++++ .../SparkKotlinCompilerGradlePlugin.kt | 64 +++++++++++++++++++ jupyter/build.gradle.kts | 4 +- kotlin-spark-api/build.gradle.kts | 4 +- scala-helpers/build.gradle.kts | 2 +- scala-tuples-in-kotlin/build.gradle.kts | 2 +- settings.gradle.kts | 1 + 30 files changed, 251 insertions(+), 57 deletions(-) rename compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/SimplePluginRegistrar.kt (83%) rename compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/SparkifyCommandLineProcessor.kt (96%) rename compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/SparkifyCompilerPluginRegistrar.kt (85%) rename compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt (98%) rename compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/ir/SparkifyIrGenerationExtension.kt (86%) rename compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/runners/BoxTestGenerated.java (89%) rename compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/GenerateTests.kt (76%) rename compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/runners/AbstractBoxTest.kt (97%) rename compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/runners/AbstractDiagnosticTest.kt (71%) rename compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/runners/BaseTestRunner.kt (89%) rename compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/{ => api}/compilerPlugin/services/ExtensionRegistrarConfigurator.kt (87%) create mode 100644 gradle-plugin/build.gradle.kts create mode 100644 gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerExtension.kt create mode 100644 gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerGradlePlugin.kt diff --git a/build.gradle.kts b/build.gradle.kts index 9b8a6d91..325c03d4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,6 +21,9 @@ plugins { idea kotlin version Versions.kotlin apply false buildconfig version Versions.buildconfig apply false + + // Needs to be installed in the local maven repository + id("org.jetbrains.kotlinx.spark.api") version Versions.project apply false } group = Versions.groupID @@ -127,17 +130,17 @@ subprojects { val projectVersion = Versions.project val groupId = Versions.groupID - val compilerPluginId = "$groupId.compilerPlugin" - val compilerPluginArtifactId = compilerPlugin.name val gradlePluginArtifactId = gradlePlugin.name - val defaultSparkifyFqName = "$groupId.plugin.annotations.Sparkify" - val defaultColumnNameFqName = "$groupId.plugin.annotations.ColumnName" + val compilerPluginId = "$groupId.api" + + val defaultSparkifyFqName = "$groupId.api.plugin.annotations.Sparkify" + val defaultColumnNameFqName = "$groupId.api.plugin.annotations.ColumnName" val projectRoot = project.rootDir.absolutePath - packageName(groupId) + packageName("$groupId.api") className("Artifacts") buildConfigField("compilerPluginId", compilerPluginId) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 1c7fefc4..656a8d0c 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,10 +1,8 @@ -import org.gradle.kotlin.dsl.`kotlin-dsl` -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { `kotlin-dsl` } repositories { mavenCentral() + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap") } diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 95168433..20fce75d 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,4 +1,4 @@ -object Dependencies { +object Dependencies : Dsl { inline val kotlinStdLib get() = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlin}" inline val reflect get() = "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlin}" inline val scalaLibrary get() = "org.scala-lang:scala-library:${Versions.scala}" @@ -35,6 +35,7 @@ object Dependencies { inline val kotlinScriptRuntime get() = "org.jetbrains.kotlin:kotlin-script-runtime:${Versions.kotlin}" inline val kotlinAnnotationsJvm get() = "org.jetbrains.kotlin:kotlin-annotations-jvm:${Versions.kotlin}" inline val kotlinCompilerInternalTestFramework get() = "org.jetbrains.kotlin:kotlin-compiler-internal-test-framework:${Versions.kotlin}" + inline val kotlinGradlePlugin get() = "org.jetbrains.kotlin:kotlin-gradle-plugin" } diff --git a/buildSrc/src/main/kotlin/Helpers.kt b/buildSrc/src/main/kotlin/Helpers.kt index 0f0f3c40..cc313776 100644 --- a/buildSrc/src/main/kotlin/Helpers.kt +++ b/buildSrc/src/main/kotlin/Helpers.kt @@ -2,6 +2,10 @@ import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.artifacts.dsl.DependencyHandler +interface Dsl { + operator fun invoke(block: T.() -> Unit) = block(this as T) +} + fun DependencyHandler.testApi(vararg dependencyNotations: Any): List = dependencyNotations.map { add("testApi", it) @@ -33,10 +37,15 @@ fun DependencyHandler.runtimeOnly(vararg dependencyNotations: Any): List = + dependencyNotations.map { + add("compileOnly", it) + } + fun DependencyHandler.project( path: String, configuration: String? = null ): ProjectDependency = project( if (configuration != null) mapOf("path" to path, "configuration" to configuration) else mapOf("path" to path) -) as ProjectDependency +) as ProjectDependency \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Plugins.kt b/buildSrc/src/main/kotlin/Plugins.kt index 3b5f66af..10af1a03 100644 --- a/buildSrc/src/main/kotlin/Plugins.kt +++ b/buildSrc/src/main/kotlin/Plugins.kt @@ -36,3 +36,8 @@ inline val PluginDependenciesSpec.jupyter inline val PluginDependenciesSpec.buildconfig get() = id("com.github.gmazzo.buildconfig") +inline val PluginDependenciesSpec.gradlePublishPlugin + get() = id("com.gradle.plugin-publish") version Versions.gradlePublishPlugin + +inline val PluginDependenciesSpec.shadow + get() = id("com.github.johnrengelman.shadow") version Versions.shadow diff --git a/buildSrc/src/main/kotlin/Projects.kt b/buildSrc/src/main/kotlin/Projects.kt index 16c03483..a8c02070 100644 --- a/buildSrc/src/main/kotlin/Projects.kt +++ b/buildSrc/src/main/kotlin/Projects.kt @@ -2,7 +2,7 @@ import org.gradle.api.Project -object Projects { +object Projects : Dsl { inline fun Project.searchProject(name: String): Project = rootProject diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index c8b09d24..4dbc3cba 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -1,5 +1,5 @@ -object Versions { - const val project = "1.2.5-SNAPSHOT" +object Versions : Dsl { + const val project = "2.0.0-SNAPSHOT" const val groupID = "org.jetbrains.kotlinx.spark" const val kotlin = "2.0.0-Beta5" const val jvmTarget = "8" @@ -13,7 +13,9 @@ object Versions { inline val sparkConnect get() = System.getProperty("sparkConnect", "false").toBoolean() const val jupyter = "0.12.0-32-1" + const val gradlePublishPlugin = "1.1.0" const val kotest = "5.5.4" + const val shadow = "8.1.1" const val buildconfig = "5.3.5" diff --git a/compiler-plugin/build.gradle.kts b/compiler-plugin/build.gradle.kts index 2644c065..629b74ad 100644 --- a/compiler-plugin/build.gradle.kts +++ b/compiler-plugin/build.gradle.kts @@ -1,9 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { java kotlin - mavenPublishBase + mavenPublish buildconfig } @@ -24,7 +25,7 @@ sourceSets { } dependencies { - with(Dependencies) { + Dependencies { compileOnly(kotlinCompiler) testRuntimeOnly( @@ -62,17 +63,29 @@ tasks.test { } tasks.withType().configureEach { - kotlinOptions { - languageVersion = "2.0" - freeCompilerArgs = freeCompilerArgs + - "-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi" + - "-Xcontext-receivers" + compilerOptions { + freeCompilerArgs.addAll( + "-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi", + "-Xcontext-receivers" + ) + languageVersion = KotlinVersion.KOTLIN_2_0 + } +} + +kotlin { + jvmToolchain { + languageVersion = JavaLanguageVersion.of(8) + } +} +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) } } val generateTests by tasks.creating(JavaExec::class) { classpath = sourceSets.test.get().runtimeClasspath - mainClass.set("org.jetbrains.kotlinx.spark.compilerPlugin.GenerateTestsKt") + mainClass.set("org.jetbrains.kotlinx.spark.api.compilerPlugin.GenerateTestsKt") } val compileTestKotlin by tasks.getting { diff --git a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SimplePluginRegistrar.kt b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SimplePluginRegistrar.kt similarity index 83% rename from compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SimplePluginRegistrar.kt rename to compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SimplePluginRegistrar.kt index 2acc6cdc..2451839f 100644 --- a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SimplePluginRegistrar.kt +++ b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SimplePluginRegistrar.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin +package org.jetbrains.kotlinx.spark.api.compilerPlugin import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar diff --git a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCommandLineProcessor.kt b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCommandLineProcessor.kt similarity index 96% rename from compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCommandLineProcessor.kt rename to compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCommandLineProcessor.kt index c5081347..b0e29d8f 100644 --- a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCommandLineProcessor.kt +++ b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCommandLineProcessor.kt @@ -1,11 +1,11 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin +package org.jetbrains.kotlinx.spark.api.compilerPlugin import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfigurationKey -import org.jetbrains.kotlinx.spark.Artifacts +import org.jetbrains.kotlinx.spark.api.Artifacts open class SparkifyCommandLineProcessor : CommandLineProcessor { diff --git a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCompilerPluginRegistrar.kt b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCompilerPluginRegistrar.kt similarity index 85% rename from compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCompilerPluginRegistrar.kt rename to compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCompilerPluginRegistrar.kt index 264b5a3b..f42698db 100644 --- a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/SparkifyCompilerPluginRegistrar.kt +++ b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/SparkifyCompilerPluginRegistrar.kt @@ -1,10 +1,10 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin +package org.jetbrains.kotlinx.spark.api.compilerPlugin import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlinx.spark.Artifacts -import org.jetbrains.kotlinx.spark.compilerPlugin.ir.SparkifyIrGenerationExtension +import org.jetbrains.kotlinx.spark.api.Artifacts +import org.jetbrains.kotlinx.spark.api.compilerPlugin.ir.SparkifyIrGenerationExtension open class SparkifyCompilerPluginRegistrar: CompilerPluginRegistrar() { init { diff --git a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt similarity index 98% rename from compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt rename to compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt index 7e39ab38..b0f338c9 100644 --- a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt +++ b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/DataClassPropertyAnnotationGenerator.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.ir +package org.jetbrains.kotlinx.spark.api.compilerPlugin.ir import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.IrElement diff --git a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/SparkifyIrGenerationExtension.kt b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/SparkifyIrGenerationExtension.kt similarity index 86% rename from compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/SparkifyIrGenerationExtension.kt rename to compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/SparkifyIrGenerationExtension.kt index ca2e9bbd..02732fe4 100644 --- a/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/ir/SparkifyIrGenerationExtension.kt +++ b/compiler-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/ir/SparkifyIrGenerationExtension.kt @@ -1,9 +1,10 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.ir +package org.jetbrains.kotlinx.spark.api.compilerPlugin.ir import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +import org.jetbrains.kotlinx.spark.api.compilerPlugin.ir.DataClassPropertyAnnotationGenerator class SparkifyIrGenerationExtension( private val sparkifyAnnotationFqNames: List, diff --git a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor index 4d95540d..9eff122b 100644 --- a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor +++ b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor @@ -1 +1 @@ -org.jetbrains.kotlinx.spark.compilerPlugin.SparkifyCommandLineProcessor +org.jetbrains.kotlinx.spark.api.compilerPlugin.SparkifyCommandLineProcessor diff --git a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar index f1d5a663..0568356a 100644 --- a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar +++ b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar @@ -1 +1 @@ -org.jetbrains.kotlinx.spark.compilerPlugin.SparkifyCompilerPluginRegistrar +org.jetbrains.kotlinx.spark.api.compilerPlugin.SparkifyCompilerPluginRegistrar diff --git a/compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BoxTestGenerated.java b/compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BoxTestGenerated.java similarity index 89% rename from compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BoxTestGenerated.java rename to compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BoxTestGenerated.java index 70904cb8..4e843bee 100644 --- a/compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BoxTestGenerated.java +++ b/compiler-plugin/src/test-gen/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BoxTestGenerated.java @@ -1,6 +1,6 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.runners; +package org.jetbrains.kotlinx.spark.api.compilerPlugin.runners; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; @@ -11,7 +11,7 @@ import java.io.File; import java.util.regex.Pattern; -/** This class is generated by {@link org.jetbrains.kotlinx.spark.compilerPlugin.GenerateTestsKt}. DO NOT MODIFY MANUALLY */ +/** This class is generated by {@link org.jetbrains.kotlinx.spark.api.compilerPlugin.GenerateTestsKt}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("/mnt/data/Projects/kotlin-spark-api/compiler-plugin/src/test/resources/testData/box") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/GenerateTests.kt b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/GenerateTests.kt similarity index 76% rename from compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/GenerateTests.kt rename to compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/GenerateTests.kt index 8b74142c..a85d0a1b 100644 --- a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/GenerateTests.kt +++ b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/GenerateTests.kt @@ -1,8 +1,8 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin +package org.jetbrains.kotlinx.spark.api.compilerPlugin import org.jetbrains.kotlin.generators.generateTestGroupSuiteWithJUnit5 -import org.jetbrains.kotlinx.spark.Artifacts -import org.jetbrains.kotlinx.spark.compilerPlugin.runners.AbstractBoxTest +import org.jetbrains.kotlinx.spark.api.Artifacts +import org.jetbrains.kotlinx.spark.api.compilerPlugin.runners.AbstractBoxTest fun main() { generateTestGroupSuiteWithJUnit5 { diff --git a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractBoxTest.kt b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractBoxTest.kt similarity index 97% rename from compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractBoxTest.kt rename to compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractBoxTest.kt index ed2608b1..26030a4a 100644 --- a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractBoxTest.kt +++ b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractBoxTest.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.runners +package org.jetbrains.kotlinx.spark.api.compilerPlugin.runners import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.FirParser diff --git a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractDiagnosticTest.kt b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractDiagnosticTest.kt similarity index 71% rename from compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractDiagnosticTest.kt rename to compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractDiagnosticTest.kt index 626186aa..9c2f362f 100644 --- a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/AbstractDiagnosticTest.kt +++ b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/AbstractDiagnosticTest.kt @@ -1,11 +1,8 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.runners +package org.jetbrains.kotlinx.spark.api.compilerPlugin.runners import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder -import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB -import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP import org.jetbrains.kotlin.test.directives.configureFirParser -import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration import org.jetbrains.kotlin.test.services.EnvironmentBasedStandardLibrariesPathProvider import org.jetbrains.kotlin.test.services.KotlinStandardLibrariesPathProvider diff --git a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BaseTestRunner.kt b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BaseTestRunner.kt similarity index 89% rename from compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BaseTestRunner.kt rename to compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BaseTestRunner.kt index f43cd4ce..fb3da3cb 100644 --- a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/runners/BaseTestRunner.kt +++ b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/runners/BaseTestRunner.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.runners +package org.jetbrains.kotlinx.spark.api.compilerPlugin.runners import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives @@ -8,7 +8,7 @@ import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration import org.jetbrains.kotlin.test.services.EnvironmentBasedStandardLibrariesPathProvider import org.jetbrains.kotlin.test.services.KotlinStandardLibrariesPathProvider -import org.jetbrains.kotlinx.spark.compilerPlugin.services.ExtensionRegistrarConfigurator +import org.jetbrains.kotlinx.spark.api.compilerPlugin.services.ExtensionRegistrarConfigurator import org.junit.jupiter.api.BeforeAll abstract class BaseTestRunner : AbstractKotlinCompilerTest() { diff --git a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/services/ExtensionRegistrarConfigurator.kt b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/services/ExtensionRegistrarConfigurator.kt similarity index 87% rename from compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/services/ExtensionRegistrarConfigurator.kt rename to compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/services/ExtensionRegistrarConfigurator.kt index 563af572..f16e26d8 100644 --- a/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/compilerPlugin/services/ExtensionRegistrarConfigurator.kt +++ b/compiler-plugin/src/test/kotlin/org/jetbrains/kotlinx/spark/api/compilerPlugin/services/ExtensionRegistrarConfigurator.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlinx.spark.compilerPlugin.services +package org.jetbrains.kotlinx.spark.api.compilerPlugin.services import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar @@ -6,7 +6,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.EnvironmentConfigurator import org.jetbrains.kotlin.test.services.TestServices -import org.jetbrains.kotlinx.spark.compilerPlugin.ir.SparkifyIrGenerationExtension +import org.jetbrains.kotlinx.spark.api.compilerPlugin.ir.SparkifyIrGenerationExtension class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions( diff --git a/examples/build.gradle.kts b/examples/build.gradle.kts index 409d2122..7f371ecc 100644 --- a/examples/build.gradle.kts +++ b/examples/build.gradle.kts @@ -1,26 +1,34 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { + // Needs to be installed in the local maven repository + id("org.jetbrains.kotlinx.spark.api") kotlin - idea } +//kotlinSparkApi { +// enabled = true +// sparkifyAnnotationFqNames = listOf( +// "org.jetbrains.kotlinx.spark.api.plugin.annotations.Sparkify", +// ) +//} + group = Versions.groupID version = Versions.project repositories { + mavenLocal() mavenCentral() } dependencies { - - with(Projects) { + Projects { implementation( kotlinSparkApi, ) } - with(Dependencies) { + Dependencies { // https://github.com/FasterXML/jackson-bom/issues/52 if (Versions.spark == "3.3.1") implementation(jacksonDatabind) @@ -31,12 +39,12 @@ dependencies { sparkStreaming, sparkStreamingKafka, ) - } } kotlin { + jvmToolchain(8) jvmToolchain { languageVersion = JavaLanguageVersion.of(Versions.jvmTarget) } -} +} \ No newline at end of file diff --git a/gradle-plugin/build.gradle.kts b/gradle-plugin/build.gradle.kts new file mode 100644 index 00000000..9facda3f --- /dev/null +++ b/gradle-plugin/build.gradle.kts @@ -0,0 +1,61 @@ +@file:Suppress("UnstableApiUsage") + +plugins { + `java-gradle-plugin` + kotlin + buildconfig + signing + gradlePublishPlugin +} + +group = Versions.groupID +version = Versions.project + +publishing { + repositories { + maven { + name = "localPluginRepository" + url = uri("~/.m2/repository") + } + } +} + +gradlePlugin { + website = "https://github.com/Kotlin/kotlin-spark-api" + vcsUrl = "https://github.com/Kotlin/kotlin-spark-api" + + plugins.create("kotlin-spark-api") { + id = "${Versions.groupID}.api" + displayName = "Kotlin Spark API (Gradle) Compiler Plugin" + description = "TODO" + tags = setOf("kotlin", "spark", "compiler", "gradle", "Sparkify", "columnName") + implementationClass = "${Versions.groupID}.api.gradlePlugin.SparkKotlinCompilerGradlePlugin" + } +} + +repositories { + mavenCentral() + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap") +} + +dependencies { + Dependencies { + compileOnly( + kotlinStdLib, + kotlinGradlePlugin, + gradleApi(), + gradleKotlinDsl() + ) + } +} + +//tasks.withType { +// isZip64 = true +// archiveClassifier = "" +//} + +kotlin { + jvmToolchain { + languageVersion = JavaLanguageVersion.of(Versions.jvmTarget) + } +} \ No newline at end of file diff --git a/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerExtension.kt b/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerExtension.kt new file mode 100644 index 00000000..d8dd2661 --- /dev/null +++ b/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerExtension.kt @@ -0,0 +1,31 @@ +package org.jetbrains.kotlinx.spark.api.gradlePlugin + +import org.gradle.api.Project +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.jetbrains.kotlinx.spark.api.Artifacts +import javax.inject.Inject + +abstract class SparkKotlinCompilerExtension @Inject constructor(project: Project) { + + val enabled: Property = project + .objects + .property(Boolean::class.javaObjectType) + .convention(true) + + val sparkifyAnnotationFqNames: ListProperty = project + .objects + .listProperty(String::class.java) + .convention(listOf(Artifacts.defaultSparkifyFqName)) + + val columnNameAnnotationFqNames: ListProperty = project + .objects + .listProperty(String::class.java) + .convention(listOf(Artifacts.defaultColumnNameFqName)) + + val outputDir: DirectoryProperty = project + .objects + .directoryProperty() + .convention(project.layout.buildDirectory.dir("generated/sources/sparkKotlinCompilerPlugin")) +} \ No newline at end of file diff --git a/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerGradlePlugin.kt b/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerGradlePlugin.kt new file mode 100644 index 00000000..9dffe65a --- /dev/null +++ b/gradle-plugin/src/main/kotlin/org/jetbrains/kotlinx/spark/api/gradlePlugin/SparkKotlinCompilerGradlePlugin.kt @@ -0,0 +1,64 @@ +package org.jetbrains.kotlinx.spark.api.gradlePlugin + +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.kotlin.dsl.findByType +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin +import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact +import org.jetbrains.kotlin.gradle.plugin.SubpluginOption +import org.jetbrains.kotlinx.spark.api.Artifacts + +class SparkKotlinCompilerGradlePlugin : KotlinCompilerPluginSupportPlugin { + + override fun apply(target: Project) { + target.extensions.create("kotlinSparkApi", SparkKotlinCompilerExtension::class.java, target) + + target.afterEvaluate { + it.extensions.findByType()?.apply { + compilerOptions { + // Make sure the parameters of data classes are visible to scala + javaParameters.set(true) + } + } + } + } + + override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider> { + val target = kotlinCompilation.target.name + val sourceSetName = kotlinCompilation.defaultSourceSet.name + + val project = kotlinCompilation.target.project + val extension = project.extensions.getByType(SparkKotlinCompilerExtension::class.java) + + val enabled = extension.enabled.get() + val sparkifyAnnotationFqNames = extension.sparkifyAnnotationFqNames.get() + val columnNameAnnotationFqNames = extension.columnNameAnnotationFqNames.get() + + val outputDir = extension.outputDir.get().dir("$target/$sourceSetName/kotlin") + kotlinCompilation.defaultSourceSet.kotlin.srcDir(outputDir.asFile) + + val provider = project.provider { + listOf( + SubpluginOption(key = "enabled", value = enabled.toString()), + SubpluginOption(key = "sparkifyAnnotationFqNames", value = sparkifyAnnotationFqNames.joinToString()), + SubpluginOption(key = "columnNameAnnotationFqNames", value = columnNameAnnotationFqNames.joinToString()), + ) + } + return provider + } + + override fun getCompilerPluginId() = Artifacts.compilerPluginId + + override fun getPluginArtifact(): SubpluginArtifact = + SubpluginArtifact( + groupId = Artifacts.groupId, + artifactId = Artifacts.compilerPluginArtifactId, + version = Artifacts.projectVersion, + ) + + override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true +} + + diff --git a/jupyter/build.gradle.kts b/jupyter/build.gradle.kts index 9d02f5a3..57adf168 100644 --- a/jupyter/build.gradle.kts +++ b/jupyter/build.gradle.kts @@ -37,13 +37,13 @@ tasks.processJupyterApiResources { } dependencies { - with(Projects) { + Projects { api( kotlinSparkApi, ) } - with(Dependencies) { + Dependencies { // https://github.com/FasterXML/jackson-bom/issues/52 if (Versions.spark == "3.3.1") implementation(jacksonDatabind) diff --git a/kotlin-spark-api/build.gradle.kts b/kotlin-spark-api/build.gradle.kts index 34f121c9..60e66c95 100644 --- a/kotlin-spark-api/build.gradle.kts +++ b/kotlin-spark-api/build.gradle.kts @@ -28,14 +28,14 @@ tasks.withType().configureEach { dependencies { - with(Projects) { + Projects { api( scalaHelpers, scalaTuplesInKotlin ) } - with(Dependencies) { + Dependencies { // https://github.com/FasterXML/jackson-bom/issues/52 if (Versions.spark == "3.3.1") implementation(jacksonDatabind) diff --git a/scala-helpers/build.gradle.kts b/scala-helpers/build.gradle.kts index f4ba628b..b636c14d 100644 --- a/scala-helpers/build.gradle.kts +++ b/scala-helpers/build.gradle.kts @@ -20,7 +20,7 @@ repositories { dependencies { - with(Dependencies) { + Dependencies { api( scalaLibrary, reflect, diff --git a/scala-tuples-in-kotlin/build.gradle.kts b/scala-tuples-in-kotlin/build.gradle.kts index 866dc166..cc99e208 100644 --- a/scala-tuples-in-kotlin/build.gradle.kts +++ b/scala-tuples-in-kotlin/build.gradle.kts @@ -27,7 +27,7 @@ tasks.withType().configureEach { } dependencies { - with(Dependencies) { + Dependencies { implementation( kotlinStdLib, scalaLibrary, diff --git a/settings.gradle.kts b/settings.gradle.kts index df71f5ba..98776e06 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,6 @@ pluginManagement { repositories { + mavenLocal() mavenCentral() gradlePluginPortal() maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap")