This repository has been archived by the owner on Feb 11, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
/
CodeQualityConfigurator.groovy
96 lines (80 loc) · 3.28 KB
/
CodeQualityConfigurator.groovy
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.novoda.staticanalysis.internal
import com.novoda.staticanalysis.StaticAnalysisExtension
import com.novoda.staticanalysis.Violations
import org.gradle.api.Action
import org.gradle.api.DomainObjectSet
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.quality.CodeQualityExtension
import org.gradle.api.tasks.SourceTask
abstract class CodeQualityConfigurator<T extends SourceTask, E extends CodeQualityExtension> implements Configurator {
protected final Project project
protected final Violations violations
protected final Task evaluateViolations
protected final SourceFilter sourceFilter
protected final VariantFilter variantFilter
protected CodeQualityConfigurator(Project project, Violations violations, Task evaluateViolations) {
this.project = project
this.violations = violations
this.evaluateViolations = evaluateViolations
this.sourceFilter = new SourceFilter(project)
this.variantFilter = new VariantFilter(project)
}
@Override
void execute() {
project.extensions.findByType(StaticAnalysisExtension).ext."$toolName" = { Closure config ->
project.apply plugin: toolPlugin
project.extensions.findByType(extensionClass).with {
defaultConfiguration.execute(it)
ext.exclude = { Object rule -> sourceFilter.exclude(rule) }
ext.includeVariants = { Closure<Boolean> filter -> variantFilter.includeVariantsFilter = filter }
config.delegate = it
config()
}
project.plugins.withId('com.android.application') {
configureAndroidWithVariants(variantFilter.filteredApplicationVariants)
configureToolTasks()
}
project.plugins.withId('com.android.library') {
configureAndroidWithVariants(variantFilter.filteredLibraryVariants)
configureToolTasks()
}
project.plugins.withId('java') {
configureJavaProject()
configureToolTasks()
}
}
}
def configureAndroidWithVariants(DomainObjectSet variants) {
variants.all { configureAndroidVariant(it) }
variantFilter.filteredTestVariants.all { configureAndroidVariant(it) }
variantFilter.filteredUnitTestVariants.all { configureAndroidVariant(it) }
}
def configureToolTasks() {
project.tasks.withType(taskClass) { task ->
task.group = 'verification'
configureReportEvaluation(task, violations)
}
}
protected abstract String getToolName()
protected Object getToolPlugin() {
toolName
}
protected abstract Class<E> getExtensionClass()
protected Action<E> getDefaultConfiguration() {
new Action<E>() {
void execute(E ignored) {
// no op
}
}
}
protected abstract void configureAndroidVariant(variant)
protected void configureJavaProject() {
project.tasks.withType(taskClass) { task ->
sourceFilter.applyTo(task)
task.exclude '**/*.kt'
}
}
protected abstract Class<T> getTaskClass()
protected abstract void configureReportEvaluation(T task, Violations violations)
}