-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy pathPatchModuleArgumentProvider.kt
50 lines (43 loc) · 1.72 KB
/
PatchModuleArgumentProvider.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package junitbuild.java
import junitbuild.extensions.javaModuleName
import org.gradle.api.Named
import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.the
import org.gradle.process.CommandLineArgumentProvider
import javax.inject.Inject
abstract class PatchModuleArgumentProvider @Inject constructor(compiledProject: Project, patchModuleProject: Project) :
CommandLineArgumentProvider, Named {
@get:Input
abstract val module: Property<String>
@get:InputFiles
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val patch: ConfigurableFileCollection
init {
module.convention(patchModuleProject.javaModuleName)
patch.from(compiledProject.provider {
if (patchModuleProject == compiledProject)
compiledProject.files(compiledProject.the<SourceSetContainer>().matching { it.name.startsWith("main") }
.map { it.output })
else
patchModuleProject.files(patchModuleProject.the<SourceSetContainer>()["main"].java.sourceDirectories)
})
}
override fun asArguments(): List<String> {
val path = patch.filter { it.exists() }.asPath
if (path.isEmpty()) {
return emptyList()
}
return listOf("--patch-module", "${module.get()}=$path")
}
@Internal
override fun getName() = "patch-module(${module.get()})"
}