@@ -2,15 +2,18 @@ package org.jetbrains.kotlinx.jupyter.api.plugin
2
2
3
3
import org.gradle.api.Plugin
4
4
import org.gradle.api.Project
5
+ import org.gradle.api.tasks.Copy
5
6
import org.gradle.kotlin.dsl.findByType
6
7
import org.gradle.kotlin.dsl.invoke
8
+ import org.gradle.kotlin.dsl.named
7
9
import org.gradle.kotlin.dsl.register
8
10
import org.gradle.kotlin.dsl.repositories
9
11
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
10
12
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
11
13
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
12
14
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
13
15
import org.jetbrains.kotlinx.jupyter.api.plugin.tasks.JupyterApiResourcesTask
16
+ import org.jetbrains.kotlinx.jupyter.api.plugin.tasks.whenAdded
14
17
15
18
class ApiGradlePlugin : Plugin <Project > {
16
19
override fun apply (target : Project ): Unit = with (target) {
@@ -41,37 +44,50 @@ class ApiGradlePlugin : Plugin<Project> {
41
44
}
42
45
43
46
val resourcesTaskName = " processJupyterApiResources"
44
- fun registerResourceTask () {
45
- register<JupyterApiResourcesTask >(resourcesTaskName) {
46
- val kaptKotlinTask = findByName(" kaptKotlin" )
47
- if (kaptKotlinTask != null ) {
48
- dependsOn(kaptKotlinTask)
49
- kaptKotlinTask.dependsOn(cleanJupyterTask)
50
- kaptKotlinTask.outputs.dir(jupyterBuildPath)
51
- }
47
+ fun registerResourceTask (): JupyterApiResourcesTask {
48
+ findByName(resourcesTaskName) ? : register<JupyterApiResourcesTask >(resourcesTaskName)
49
+ return named<JupyterApiResourcesTask >(resourcesTaskName).get()
50
+ }
51
+
52
+ fun dependOnProcessingTask (processTaskName : String ) {
53
+ val jupyterTask = registerResourceTask()
54
+ tasks.named<Copy >(processTaskName) {
55
+ dependsOn(resourcesTaskName)
56
+ from(jupyterTask.outputDir)
52
57
}
53
58
}
54
59
60
+ fun dependOnKapt (kaptTaskName : String ) {
61
+ registerResourceTask()
62
+ tasks.whenAdded(
63
+ { it.name == kaptTaskName },
64
+ {
65
+ tasks.named(resourcesTaskName) {
66
+ dependsOn(it)
67
+ it.dependsOn(cleanJupyterTask)
68
+ it.outputs.dir(jupyterBuildPath)
69
+ }
70
+ }
71
+ )
72
+ }
73
+
55
74
// apply configuration to JVM-only project
56
75
plugins.withId(" org.jetbrains.kotlin.jvm" ) {
57
- // Task should be registered after plugin is applied
58
- registerResourceTask()
59
- named(" processResources" ) {
60
- dependsOn(resourcesTaskName)
61
- }
76
+ dependOnProcessingTask(" processResources" )
77
+ dependOnKapt(" kaptKotlin" )
62
78
}
63
79
64
80
// apply only to multiplatform plugin
65
81
plugins.withId(" org.jetbrains.kotlin.multiplatform" ) {
66
- // Task should be registered after plugin is applied
67
- registerResourceTask()
68
82
extensions.findByType<KotlinMultiplatformExtension >()?.apply {
69
- val jvmTargetName = targets.filterIsInstance<KotlinJvmTarget >().firstOrNull()?.name
70
- ? : error(" Single JVM target not found in a multiplatform project" )
71
- named(jvmTargetName + " ProcessResources" ) {
72
- dependsOn(resourcesTaskName)
73
- }
83
+ targets.whenAdded(
84
+ { (it is KotlinJvmTarget ) },
85
+ {
86
+ dependOnProcessingTask(it.name + " ProcessResources" )
87
+ }
88
+ )
74
89
}
90
+ dependOnKapt(" kaptKotlinJvm" )
75
91
}
76
92
}
77
93
}
0 commit comments