/
DetektJvm.kt
53 lines (49 loc) · 2.74 KB
/
DetektJvm.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
51
52
53
package io.gitlab.arturbosch.detekt.internal
import io.gitlab.arturbosch.detekt.DetektPlugin
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
internal class DetektJvm(private val project: Project) {
fun registerTasks(extension: DetektExtension) {
project.extensions.getByType(KotlinJvmProjectExtension::class.java).target.compilations.all { compilation ->
val inputSource = compilation.kotlinSourceSets
.map { it.kotlin.sourceDirectories }
.fold(project.files() as FileCollection) { collection, next -> collection.plus(next) }
project.registerJvmDetektTask(compilation, extension, inputSource)
project.registerJvmCreateBaselineTask(compilation, extension, inputSource)
}
}
private fun Project.registerJvmDetektTask(
compilation: KotlinCompilation<KotlinCommonOptions>,
extension: DetektExtension,
inputSource: FileCollection
) {
registerDetektTask(DetektPlugin.DETEKT_TASK_NAME + compilation.name.capitalize(), extension) {
setSource(inputSource)
classpath.setFrom(inputSource, compilation.compileDependencyFiles)
// If a baseline file is configured as input file, it must exist to be configured, otherwise the task fails.
// We try to find the configured baseline or alternatively a specific variant matching this task.
extension.baseline?.existingVariantOrBaseFile(compilation.name)?.let { baselineFile ->
baseline.convention(layout.file(provider { baselineFile }))
}
setReportOutputConventions(reports, extension, compilation.name)
description = "EXPERIMENTAL: Run detekt analysis for ${compilation.name} classes with type resolution"
}
}
private fun Project.registerJvmCreateBaselineTask(
compilation: KotlinCompilation<KotlinCommonOptions>,
extension: DetektExtension,
inputSource: FileCollection
) {
registerCreateBaselineTask(DetektPlugin.BASELINE_TASK_NAME + compilation.name.capitalize(), extension) {
setSource(inputSource)
classpath.setFrom(inputSource, compilation.compileDependencyFiles)
val variantBaselineFile = extension.baseline?.addVariantName(compilation.name)
baseline.convention(layout.file(provider { variantBaselineFile }))
description = "EXPERIMENTAL: Creates detekt baseline for ${compilation.name} classes with type resolution"
}
}
}