@@ -7,42 +7,39 @@ package dev.icerock.moko.network
77import dev.icerock.moko.network.tasks.GenerateTask
88import org.gradle.api.Plugin
99import org.gradle.api.Project
10+ import org.gradle.api.Task
11+ import org.gradle.api.tasks.TaskProvider
12+ import org.gradle.kotlin.dsl.getByType
1013import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
14+ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
1115import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
1216import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile
1317
14- @Suppress(" ForbiddenComment" )
1518class MultiPlatformNetworkGeneratorPlugin : Plugin <Project > {
1619
17- override fun apply (target : Project ) {
18- val mokoNetworkExtension = target .extensions.create(" mokoNetwork" , SpecConfig ::class .java)
20+ override fun apply (project : Project ) {
21+ val mokoNetworkExtension = project .extensions.create(" mokoNetwork" , SpecConfig ::class .java)
1922
20- target.afterEvaluate { it.setupProject(mokoNetworkExtension) }
23+ project.afterEvaluate {
24+ it.setupProject(mokoNetworkExtension)
25+ }
2126 }
2227
23- private fun Project.setupProject (extension : SpecConfig ) {
24- val multiplatformExtension =
25- extensions.findByType(KotlinMultiplatformExtension ::class .java)
28+ private fun Project.setupProject (mokoNetworkExtension : SpecConfig ) {
29+ val multiplatformExtension: KotlinMultiplatformExtension = project.extensions.getByType()
2630
27- if (extension .specs.isEmpty()) return
31+ if (mokoNetworkExtension .specs.isEmpty()) return
2832
2933 val openApiGenerateTask = tasks.create(" openApiGenerate" ) {
3034 it.group = " moko-network"
3135 }
3236
33- extension.specs.forEach { spec ->
34- val generatedDir = " $buildDir /generated/moko-network/${spec.name} "
35- val generatedSourcesDir = " $generatedDir /src/main/kotlin"
36- val sourceSet = multiplatformExtension?.sourceSets?.getByName(spec.sourceSet)
37-
38- sourceSet?.kotlin?.srcDir(generatedSourcesDir)
39-
40- val generateTask: GenerateTask = tasks.create(
41- " ${spec.name} OpenApiGenerate" ,
42- GenerateTask ::class .java
43- ) { it.configure(spec, generatedDir) }
44-
45- openApiGenerateTask.dependsOn(generateTask)
37+ mokoNetworkExtension.specs.forEach { spec ->
38+ registerSpecGenerationTask(
39+ spec = spec,
40+ openApiGenerateTask = openApiGenerateTask,
41+ multiplatformExtension = multiplatformExtension
42+ )
4643 }
4744
4845 tasks.matching { it.name == " preBuild" }
@@ -53,3 +50,22 @@ class MultiPlatformNetworkGeneratorPlugin : Plugin<Project> {
5350 .all { it.dependsOn(openApiGenerateTask) }
5451 }
5552}
53+
54+ private fun Project.registerSpecGenerationTask (
55+ spec : SpecInfo ,
56+ openApiGenerateTask : Task ,
57+ multiplatformExtension : KotlinMultiplatformExtension ,
58+ ) {
59+ val generatedDir = " $buildDir /generated/moko-network/${spec.name} "
60+ val generatedSourcesDir = " $generatedDir /src/main/kotlin"
61+ val sourceSet: KotlinSourceSet ? = multiplatformExtension.sourceSets.getByName(spec.sourceSet)
62+
63+ sourceSet?.kotlin?.srcDir(generatedSourcesDir)
64+
65+ val generateTask: TaskProvider <GenerateTask > = tasks.register(
66+ " ${spec.name} OpenApiGenerate" ,
67+ GenerateTask ::class .java
68+ ) { it.configure(spec, generatedDir) }
69+
70+ openApiGenerateTask.dependsOn(generateTask)
71+ }
0 commit comments