1
2
3
4
5 package com.qulice.pmd;
6
7 import com.qulice.spi.Environment;
8 import com.qulice.spi.ResourceValidator;
9 import com.qulice.spi.Violation;
10 import java.io.File;
11 import java.util.Collection;
12 import java.util.LinkedList;
13 import net.sourceforge.pmd.util.datasource.DataSource;
14 import net.sourceforge.pmd.util.datasource.FileDataSource;
15
16
17
18
19
20
21 public final class PmdValidator implements ResourceValidator {
22
23
24
25
26 private final transient Environment env;
27
28
29
30
31
32 public PmdValidator(final Environment env) {
33 this.env = env;
34 }
35
36 @Override
37 @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
38 public Collection<Violation> validate(final Collection<File> files) {
39 final SourceValidator validator = new SourceValidator(this.env);
40 final Collection<DataSource> sources = this.getNonExcludedFiles(files);
41 final Collection<PmdError> errors = validator.validate(
42 sources, this.env.basedir().getPath()
43 );
44 final Collection<Violation> violations = new LinkedList<>();
45 for (final PmdError error : errors) {
46 violations.add(
47 new Violation.Default(
48 this.name(),
49 error.name(),
50 error.fileName(),
51 error.lines(),
52 error.description()
53 )
54 );
55 }
56 return violations;
57 }
58
59 @Override
60 public String name() {
61 return "PMD";
62 }
63
64
65
66
67
68
69 public Collection<DataSource> getNonExcludedFiles(final Collection<File> files) {
70 final Collection<DataSource> sources = new LinkedList<>();
71 for (final File file : files) {
72 final String name = file.getPath().substring(
73 this.env.basedir().toString().length()
74 );
75 if (this.env.exclude("pmd", name)) {
76 continue;
77 }
78 if (!name.matches("^.*\\.java$")) {
79 continue;
80 }
81 sources.add(new FileDataSource(file));
82 }
83 return sources;
84 }
85 }