2
2
3
3
import java .util .Arrays ;
4
4
import java .util .List ;
5
+ import java .util .Set ;
5
6
import java .util .SortedSet ;
6
7
import java .util .TreeSet ;
7
8
13
14
import net .sf .iwant .api .javamodules .CodeStyle ;
14
15
import net .sf .iwant .api .javamodules .CodeStylePolicy ;
15
16
import net .sf .iwant .api .javamodules .JavaBinModule ;
17
+ import net .sf .iwant .api .javamodules .JavaClassesAndSources ;
16
18
import net .sf .iwant .api .javamodules .JavaModule ;
17
19
import net .sf .iwant .api .javamodules .JavaSrcModule ;
18
20
import net .sf .iwant .api .javamodules .JavaSrcModule .IwantSrcModuleSpex ;
21
+ import net .sf .iwant .api .model .Path ;
19
22
import net .sf .iwant .api .model .SideEffect ;
20
23
import net .sf .iwant .api .model .Source ;
21
24
import net .sf .iwant .api .model .StringFilter ;
22
25
import net .sf .iwant .api .model .Target ;
26
+ import net .sf .iwant .plugin .findbugs .FindbugsDistribution ;
27
+ import net .sf .iwant .plugin .findbugs .FindbugsOutputFormat ;
28
+ import net .sf .iwant .plugin .findbugs .FindbugsReport ;
29
+ import net .sf .iwant .plugin .findbugs .FindbugsReport .FindbugsReportSpex ;
23
30
24
31
public class ChalkboxWorkspace implements IwantWorkspace {
25
32
26
33
@ Override
27
34
public List <? extends Target > targets () {
28
- return Arrays .asList (emmaCoverage (), backlogTxt ());
35
+ return Arrays .asList (emmaCoverage (), backlogTxt (), findbugsReport ());
36
+ }
37
+
38
+ private static Target findbugsReport () {
39
+ return findbugsReportFor ("findbugs-report" , FindbugsOutputFormat .HTML );
40
+ }
41
+
42
+ private static Target findbugsReportFor (String name ,
43
+ FindbugsOutputFormat outputFormat ) {
44
+ FindbugsDistribution findbugs = FindbugsDistribution .ofVersion ("2.0.2" );
45
+ FindbugsReportSpex report = FindbugsReport .with ().name (name )
46
+ .using (findbugs , ant (), antLauncher ())
47
+ .outputFormat (outputFormat );
48
+
49
+ FindbugsReportHelper .reportWithModules (report , allSrcModules ());
50
+ return report .end ();
51
+ }
52
+
53
+ private static Path ant () {
54
+ return TestedIwantDependencies .antJar ();
55
+ }
56
+
57
+ private static Path antLauncher () {
58
+ return TestedIwantDependencies .antLauncherJar ();
59
+ }
60
+
61
+ private static class FindbugsReportHelper {
62
+
63
+ public static FindbugsReportSpex reportWithModules (
64
+ FindbugsReportSpex report ,
65
+ SortedSet <? extends JavaModule > modules ) {
66
+ for (JavaModule module : modules ) {
67
+ reportWithModule (report , module );
68
+ }
69
+ return report ;
70
+ }
71
+
72
+ private static void reportWithModule (FindbugsReportSpex report ,
73
+ JavaModule module ) {
74
+ Set <JavaModule > allDeps = module .effectivePathForTestRuntime ();
75
+ for (JavaModule dep : allDeps ) {
76
+ if (!(dep instanceof JavaSrcModule )) {
77
+ report .auxClasses (dep .mainArtifact ());
78
+ continue ;
79
+ }
80
+ JavaSrcModule srcDep = (JavaSrcModule ) dep ;
81
+ if (srcDep .mainArtifact () != null ) {
82
+ report .classesToAnalyze (new JavaClassesAndSources (srcDep
83
+ .mainArtifact (), srcDep .mainJavasAsPaths ()));
84
+ }
85
+ if (srcDep .testArtifact () != null ) {
86
+ report .classesToAnalyze (new JavaClassesAndSources (srcDep
87
+ .testArtifact (), srcDep .testJavasAsPaths ()));
88
+ }
89
+ }
90
+ }
91
+
29
92
}
30
93
31
94
@ Override
@@ -59,16 +122,17 @@ private static Target backlogTxt() {
59
122
}
60
123
61
124
private static Target emmaCoverage () {
62
- return emmaTarget (allSrcModules ());
125
+ return emmaTarget (allSrcModules (), "coverage-report" );
63
126
}
64
127
65
- private static Target emmaTarget (final SortedSet <JavaSrcModule > modules ) {
128
+ private static Target emmaTarget (final SortedSet <JavaSrcModule > modules ,
129
+ String name ) {
66
130
final EmmaTargetsOfJavaModules emmaTargets = EmmaTargetsOfJavaModules
67
131
.with ()
68
132
.antJars (TestedIwantDependencies .antJar (),
69
133
TestedIwantDependencies .antLauncherJar ())
70
134
.emma (TestedIwantDependencies .emma ()).modules (modules ).end ();
71
- return emmaTargets .emmaReport ();
135
+ return emmaTargets .emmaReport (name );
72
136
}
73
137
74
138
private static SortedSet <JavaSrcModule > allSrcModules () {
@@ -101,13 +165,14 @@ private static JavaModule junitAsProviding() {
101
165
return JavaBinModule
102
166
.providing (
103
167
Source .underWsroot ("junit-4.10/lib/junit-4.10.jar" ),
104
- Source .underWsroot ("junit-4.10/lib-sources/junit-4.10-src.jar" ));
168
+ Source .underWsroot ("junit-4.10/lib-sources/junit-4.10-src.jar" ))
169
+ .end ();
105
170
}
106
171
107
172
private static JavaModule junit () {
108
173
return JavaBinModule .named ("lib/junit-4.10.jar" )
109
174
.source ("lib-sources/junit-4.10-src.jar" )
110
- .inside (JavaSrcModule .with ().name ("junit-4.10" ).end ());
175
+ .inside (JavaSrcModule .with ().name ("junit-4.10" ).end ()). end () ;
111
176
}
112
177
113
178
private static JavaSrcModule example () {
@@ -125,6 +190,6 @@ private static JavaSrcModule backlog() {
125
190
private static JavaModule myBacklog () {
126
191
return JavaBinModule .named ("lib/my-backlog-1.0.2.jar" )
127
192
.source ("lib-sources/my-backlog-1.0.2-sources.jar" )
128
- .inside (JavaSrcModule .with ().name ("backlog" ).end ());
193
+ .inside (JavaSrcModule .with ().name ("backlog" ).end ()). end () ;
129
194
}
130
195
}
0 commit comments