From a97e4b581aef0c63acf81cd140a895ffc08edfec Mon Sep 17 00:00:00 2001 From: smidf Date: Wed, 27 Dec 2023 15:51:32 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9E=95=20Add=20Kotlin=20Gradle=20plugin?= =?UTF-8?q?=20API=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 1 + plugin/build.gradle.kts | 1 + 2 files changed, 2 insertions(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1beb528..5e58096 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,6 +16,7 @@ dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } [libraries] openapiGenerator = { group = "org.openapitools", name = "openapi-generator", version.ref = "openapi" } +kotlinPluginApi = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin-api", version.ref = "kotlin" } jUnit = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "jUnit" } kotest = { group = "io.kotest", name = "kotest-runner-junit5", version.ref = "kotest" } diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 1e1dcb1..ff7ed4f 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -9,6 +9,7 @@ plugins { dependencies { implementation(libs.openapiGenerator) + implementation(libs.kotlinPluginApi) testImplementation(libs.jUnit) testImplementation(libs.kotest) From 097d0bff75dcbd94c6b4b71d17076f635fe31265 Mon Sep 17 00:00:00 2001 From: smidf Date: Wed, 27 Dec 2023 15:55:05 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9B=20Add=20dependency=20to=20all?= =?UTF-8?q?=20Kotlin=20compile=20tasks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../swagger/codegen/SwaggerCodeGenPlugin.kt | 41 +++++++------------ .../kotlin/cz/eman/swagger/codegen/Utils.kt | 8 ++++ sample/kotlin-client/build.gradle.kts | 5 --- 3 files changed, 23 insertions(+), 31 deletions(-) create mode 100644 plugin/src/main/kotlin/cz/eman/swagger/codegen/Utils.kt diff --git a/plugin/src/main/kotlin/cz/eman/swagger/codegen/SwaggerCodeGenPlugin.kt b/plugin/src/main/kotlin/cz/eman/swagger/codegen/SwaggerCodeGenPlugin.kt index 05afdc9..f3e243c 100644 --- a/plugin/src/main/kotlin/cz/eman/swagger/codegen/SwaggerCodeGenPlugin.kt +++ b/plugin/src/main/kotlin/cz/eman/swagger/codegen/SwaggerCodeGenPlugin.kt @@ -32,7 +32,6 @@ open class SwaggerCodeGenPlugin : Plugin { val configsExt = project.extensions.create(SWAGGER_TASK, SwaggerCodeGenConfig::class.java) autoHookJava(project, configsExt) autoHookKotlin(project, configsExt) - autoHookKotlin(project, configsExt, true) } /** @@ -69,41 +68,31 @@ open class SwaggerCodeGenPlugin : Plugin { } /** - * Auto-hooks openApi generation to project that contain compile task [COMPILE_KOTLIN] or [COMPILE_KOTLIN_JVM]. - * Finds the task and crates java generator task for it with dependency. + * Auto-hooks openApi generation to project that contain Kotlin compile task. + * Finds the task and creates java generator task for it with dependency. * * @param project used to search for compile tasks * @param configsExt swagger gen config */ - private fun autoHookKotlin( - project: Project, - configsExt: SwaggerCodeGenConfig, - isMpp: Boolean = false - ) { - var hooked = false + private fun autoHookKotlin(project: Project, configsExt: SwaggerCodeGenConfig) { project.afterEvaluate { if (configsExt.autoHook) { - val compileTaskName = if (isMpp) { - COMPILE_KOTLIN_JVM - } else { - COMPILE_KOTLIN + val generators = configsExt.configs.mapNotNull { taskConfig -> + createGenerator( + project, + LANGUAGE_KOTLIN, + configsExt, + taskConfig + ) } - project.getTasksByName(compileTaskName, false).firstOrNull()?.let { compileKotlin -> - configsExt.configs.forEach { taskConfig -> - createGenerator( - project, - LANGUAGE_KOTLIN, - configsExt, - taskConfig - )?.let { task -> - compileKotlin.dependsOn(task) - } - } - hooked = true + + val compileTasks = project.kotlinCompileTasks() + logger.info("Kotlin auto-hooked: ${compileTasks.isNotEmpty()}") + compileTasks.all { task -> + task.dependsOn(generators) } } } - logger.info("Kotlin (isMpp: $isMpp) auto-hooked: $hooked") } /** diff --git a/plugin/src/main/kotlin/cz/eman/swagger/codegen/Utils.kt b/plugin/src/main/kotlin/cz/eman/swagger/codegen/Utils.kt new file mode 100644 index 0000000..d89386c --- /dev/null +++ b/plugin/src/main/kotlin/cz/eman/swagger/codegen/Utils.kt @@ -0,0 +1,8 @@ +package cz.eman.swagger.codegen + +import org.gradle.api.Project +import org.gradle.api.tasks.TaskCollection +import org.jetbrains.kotlin.gradle.dsl.KotlinCompile + +internal fun Project.kotlinCompileTasks(): TaskCollection> = + tasks.withType(KotlinCompile::class.java) diff --git a/sample/kotlin-client/build.gradle.kts b/sample/kotlin-client/build.gradle.kts index 2e14ba9..395c40e 100644 --- a/sample/kotlin-client/build.gradle.kts +++ b/sample/kotlin-client/build.gradle.kts @@ -1,5 +1,4 @@ import cz.eman.swagger.codegen.SwaggerCodeGenConfig -import cz.eman.swagger.codegen.SwaggerCodeGenTask import cz.eman.swagger.codegen.SwaggerCodeGenTaskConfig import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -93,7 +92,3 @@ tasks.withType { jvmTarget = javaVersion.toString() } } - -tasks.withType { - project.tasks.findByName("kaptGenerateStubsKotlin")?.dependsOn(this) -}