Skip to content

Commit 77798d7

Browse files
committed
Fix the plugin so that the kotlin dependency is not hard. It still has a hack to make sure the kotlin compile task can depends on the code generation task.
1 parent 9ad418d commit 77798d7

File tree

3 files changed

+39
-9
lines changed

3 files changed

+39
-9
lines changed

RELEASENOTES

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
0.5: Initial release
2+
3+
0.5.1: Don't have a hard dependency on kotlin.

build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ buildscript {
3636
}
3737
}
3838

39+
3940
plugins {
4041
id "com.jfrog.bintray" version "1.6"
4142
id "com.gradle.plugin-publish" version "0.9.4"
@@ -47,7 +48,7 @@ apply plugin: 'maven-publish'
4748
sourceCompatibility = JavaVersion.VERSION_1_6
4849
targetCompatibility = JavaVersion.VERSION_1_6
4950

50-
version = '0.5'
51+
version = '0.5.1'
5152
group = 'net.devrieze'
5253

5354
bintray {
@@ -109,8 +110,7 @@ dependencies {
109110
}
110111

111112
task sourceJar(type:Jar) {
112-
from sourceSets.main.allJava
113-
from sourceSets.main.kotlin
113+
from sourceSets.main.allSource
114114
}
115115

116116
repositories {

src/main/kotlin/net/devrieze/gradlecodegen/plugin.kt

+33-6
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
package net.devrieze.gradlecodegen
2222

2323
import groovy.lang.Closure
24-
import org.gradle.api.DefaultTask
25-
import org.gradle.api.NamedDomainObjectContainer
26-
import org.gradle.api.Plugin
27-
import org.gradle.api.Project
24+
import org.gradle.api.*
2825
import org.gradle.api.file.FileCollection
2926
import org.gradle.api.internal.HasConvention
27+
import org.gradle.api.internal.tasks.DefaultSourceSetOutput
28+
import org.gradle.api.internal.tasks.TaskDependencyInternal
29+
import org.gradle.api.internal.tasks.TaskDependencyResolveContext
3030
import org.gradle.api.plugins.BasePlugin
3131
import org.gradle.api.plugins.JavaBasePlugin
3232
import org.gradle.api.plugins.JavaPlugin
@@ -214,6 +214,7 @@ class CodegenPlugin : Plugin<Project> {
214214
generateConfiguration.files (object : Closure<Any>(this) {
215215
override fun call() = generateTask.outputDir
216216
})
217+
217218
project.dependencies.add(sourceSet.compileConfigurationName, project.files(Callable { generateConfiguration.files }))
218219

219220
// Late bind the actual output directory
@@ -226,13 +227,39 @@ class CodegenPlugin : Plugin<Project> {
226227
clean.doFirst { project.delete(outputDir) }
227228
}
228229

229-
project.tasks.getByName(sourceSet.compileJavaTaskName).dependsOn.add(generateTask)
230-
project.tasks.getByName(sourceSet.getCompileTaskName("kotlin")).dependsOn(generateTask)
230+
project.configurations.getByName(sourceSet.compileConfigurationName).extendsFrom(generateConfiguration)
231+
232+
addGenerateTaskAsDependency(generateTask, generateTaskName, project, sourceSet)
231233

232234
project.afterEvaluate {
233235
project.extensions.getByType(IdeaModel::class.java)?.let { ideaModel ->
234236
ideaModel.module.generatedSourceDirs.add(project.file(generateTask.outputDir))
235237
}
236238
}
237239
}
240+
241+
private fun addGenerateTaskAsDependency(generateTask: GenerateTask, generateTaskName: String, project: Project, sourceSet: SourceSet) {
242+
val classesTask = project.tasks.findByName(sourceSet.classesTaskName)
243+
val tasks = mutableListOf<Task>()
244+
val depVisitor = object : TaskDependencyResolveContext {
245+
override fun add(dependency: Any) {
246+
when (dependency) {
247+
is Task -> tasks.add(dependency)
248+
is TaskDependency -> dependency.getDependencies(classesTask).forEach { dep -> tasks.add(dep) }
249+
is Buildable -> dependency.buildDependencies.getDependencies(classesTask).forEach { dep -> tasks.add(dep) }
250+
else -> project.logger.warn("Unsupported dependency type: ${dependency.javaClass}")
251+
}
252+
}
253+
254+
override fun getTask() = classesTask
255+
}
256+
(classesTask.taskDependencies as TaskDependencyInternal).visitDependencies(depVisitor)
257+
// Hack to just add it to the kotlin dependency set.
258+
project.tasks.findByName(sourceSet.getCompileTaskName("kotlin"))?.let { if (!tasks.contains(it)) {tasks.add(it)} }
259+
260+
tasks.forEach { task ->
261+
task.dependsOn(generateTask)
262+
project.logger.debug("Make task ${task.name} depend on $generateTaskName")
263+
}
264+
}
238265
}

0 commit comments

Comments
 (0)