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
77 lines (63 loc) · 2.76 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
package com.novoda.staticanalysis.internal
import com.novoda.staticanalysis.EvaluateViolationsTask
import com.novoda.staticanalysis.StaticAnalysisExtension
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.plugins.quality.CodeQualityExtension
import org.gradle.api.tasks.SourceTask
abstract class CodeQualityConfigurator<T extends SourceTask, E extends CodeQualityExtension> {
protected final Project project
protected final Violations violations
protected final EvaluateViolationsTask evaluateViolations
protected final SourceFilter sourceFilter
protected CodeQualityConfigurator(Project project, Violations violations, EvaluateViolationsTask evaluateViolations) {
this.project = project
this.violations = violations
this.evaluateViolations = evaluateViolations
this.sourceFilter = new SourceFilter(project)
}
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) }
config.delegate = it
config()
}
project.afterEvaluate {
boolean isAndroidApp = project.plugins.hasPlugin('com.android.application')
boolean isAndroidLib = project.plugins.hasPlugin('com.android.library')
if (isAndroidApp || isAndroidLib) {
configureAndroidProject(isAndroidApp ? project.android.applicationVariants : project.android.libraryVariants)
configureAndroidProject(project.android.testVariants)
configureAndroidProject(project.android.unitTestVariants)
} else {
configureJavaProject()
}
project.tasks.withType(taskClass) { task ->
task.group = 'verification'
configureReportEvaluation(task)
}
}
}
}
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 configureAndroidProject(Object variants)
protected void configureJavaProject() {
project.tasks.withType(taskClass) { task -> sourceFilter.applyTo(task) }
}
protected abstract Class<T> getTaskClass()
protected abstract void configureReportEvaluation(T task)
}