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
/
PmdConfigurator.groovy
84 lines (71 loc) · 2.78 KB
/
PmdConfigurator.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
package com.novoda.staticanalysis.internal.pmd
import com.novoda.staticanalysis.EvaluateViolationsTask
import com.novoda.staticanalysis.internal.CodeQualityConfigurator
import com.novoda.staticanalysis.internal.QuietLogger
import com.novoda.staticanalysis.internal.Violations
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.Project
import org.gradle.api.plugins.quality.Pmd
import org.gradle.api.plugins.quality.PmdExtension
class PmdConfigurator extends CodeQualityConfigurator<Pmd, PmdExtension> {
PmdConfigurator(Project project, EvaluateViolationsTask evaluateViolations) {
super(project, evaluateViolations.maybeCreate('PMD'), evaluateViolations)
}
@Override
protected String getToolName() {
'pmd'
}
@Override
protected Class<PmdExtension> getExtensionClass() {
PmdExtension
}
@Override
protected Class<Pmd> getTaskClass() {
Pmd
}
@Override
protected Action<PmdExtension> getDefaultConfiguration() {
new Action<PmdExtension>() {
@Override
void execute(PmdExtension pmdExtension) {
pmdExtension.toolVersion = '5.5.1'
pmdExtension.rulePriority = 5
}
}
}
@Override
protected void configureAndroidProject(NamedDomainObjectSet variants) {
project.with {
variants.all { variant ->
variant.sourceSets.each { sourceSet ->
def taskName = "pmd${sourceSet.name.capitalize()}"
Pmd task = tasks.findByName(taskName)
if (task == null) {
task = tasks.create(taskName, Pmd)
task.with {
description = "Run PMD analysis for ${sourceSet.name} classes"
source = sourceSet.java.srcDirs
}
}
sourceFilter.applyTo(task)
task.mustRunAfter variant.javaCompile
}
}
}
}
@Override
protected void configureReportEvaluation(Pmd pmd, Violations violations) {
pmd.ignoreFailures = true
pmd.metaClass.getLogger = { QuietLogger.INSTANCE }
def collectViolations = createViolationsCollectionTask(pmd, violations)
evaluateViolations.dependsOn collectViolations
collectViolations.dependsOn pmd
}
private CollectPmdViolationsTask createViolationsCollectionTask(Pmd pmd, Violations violations) {
project.tasks.create("collect${pmd.name.capitalize()}Violations", CollectPmdViolationsTask) { collectViolations ->
collectViolations.xmlReportFile = pmd.reports.xml.destination
collectViolations.violations = violations
}
}
}