Skip to content

Commit 5990d97

Browse files
authored
Merge pull request #52 from jenkinsci/builder-with
Add filter by file names
2 parents 33bafc0 + 3358d20 commit 5990d97

30 files changed

+541
-511
lines changed

doc/dependency-graph.puml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ skinparam rectangle {
66
BackgroundColor<<runtime>> lightBlue
77
BackgroundColor<<provided>> lightGray
88
}
9-
rectangle "coverage-model\n\n0.30.0-SNAPSHOT" as edu_hm_hafner_coverage_model_jar
9+
rectangle "coverage-model\n\n0.31.0-SNAPSHOT" as edu_hm_hafner_coverage_model_jar
1010
rectangle "spotbugs-annotations\n\n4.7.3" as com_github_spotbugs_spotbugs_annotations_jar
1111
rectangle "error_prone_annotations\n\n2.23.0" as com_google_errorprone_error_prone_annotations_jar
1212
rectangle "streamex\n\n0.8.2" as one_util_streamex_jar

src/main/java/edu/hm/hafner/coverage/ClassNode.java

+5
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,9 @@ public MethodNode createMethodNode(final String methodName, final String signatu
3636
addChild(fileNode);
3737
return fileNode;
3838
}
39+
40+
@Override
41+
public boolean isAggregation() {
42+
return false;
43+
}
3944
}

src/main/java/edu/hm/hafner/coverage/ContainerNode.java

+5
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,9 @@ public ContainerNode(final String name) {
2323
public ContainerNode copy() {
2424
return new ContainerNode(getName());
2525
}
26+
27+
@Override
28+
public boolean isAggregation() {
29+
return true;
30+
}
2631
}

src/main/java/edu/hm/hafner/coverage/Coverage.java

+24-23
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ public static Coverage valueOf(final Metric metric, final String stringRepresent
4747
int covered = Integer.parseInt(extractedCovered);
4848
int total = Integer.parseInt(extractedTotal);
4949
if (total >= covered) {
50-
return new CoverageBuilder().setMetric(metric)
51-
.setCovered(covered)
52-
.setMissed(total - covered)
50+
return new CoverageBuilder().withMetric(metric)
51+
.withCovered(covered)
52+
.withMissed(total - covered)
5353
.build();
5454
}
5555
}
@@ -69,9 +69,9 @@ public static Coverage valueOf(final Metric metric, final String stringRepresent
6969
* @return the {@code null} object
7070
*/
7171
public static Coverage nullObject(final Metric metric) {
72-
return new CoverageBuilder().setMetric(metric)
73-
.setCovered(0)
74-
.setMissed(0)
72+
return new CoverageBuilder().withMetric(metric)
73+
.withCovered(0)
74+
.withMissed(0)
7575
.build();
7676
}
7777

@@ -220,6 +220,7 @@ public String serialize() {
220220
/**
221221
* Builder to create cached {@link Coverage} instances.
222222
*/
223+
@SuppressWarnings({"checkstyle:HiddenField", "ParameterHidesMemberVariable"})
223224
public static final class CoverageBuilder {
224225
@VisibleForTesting
225226
static final int CACHE_SIZE = 16;
@@ -277,9 +278,9 @@ public CoverageBuilder(@CheckForNull final Metric metric) {
277278
* the existing coverage to copy all properties from
278279
*/
279280
public CoverageBuilder(final Coverage existing) {
280-
setMetric(existing.getMetric());
281-
setCovered(existing.getCovered());
282-
setMissed(existing.getMissed());
281+
withMetric(existing.getMetric());
282+
withCovered(existing.getCovered());
283+
withMissed(existing.getMissed());
283284
}
284285

285286
/**
@@ -291,7 +292,7 @@ public CoverageBuilder(final Coverage existing) {
291292
* @return this
292293
*/
293294
@CanIgnoreReturnValue
294-
public CoverageBuilder setMetric(final Metric metric) {
295+
public CoverageBuilder withMetric(final Metric metric) {
295296
this.metric = metric;
296297
return this;
297298
}
@@ -305,8 +306,8 @@ public CoverageBuilder setMetric(final Metric metric) {
305306
* @return this
306307
*/
307308
@CanIgnoreReturnValue
308-
public CoverageBuilder setMetric(final String metric) {
309-
return setMetric(Metric.valueOf(metric));
309+
public CoverageBuilder withMetric(final String metric) {
310+
return withMetric(Metric.valueOf(metric));
310311
}
311312

312313
/**
@@ -318,7 +319,7 @@ public CoverageBuilder setMetric(final String metric) {
318319
* @return this
319320
*/
320321
@CanIgnoreReturnValue
321-
public CoverageBuilder setTotal(final int total) {
322+
public CoverageBuilder withTotal(final int total) {
322323
this.total = total;
323324
isTotalSet = true;
324325
return this;
@@ -333,8 +334,8 @@ public CoverageBuilder setTotal(final int total) {
333334
* @return this
334335
*/
335336
@CanIgnoreReturnValue
336-
public CoverageBuilder setTotal(final String total) {
337-
return setTotal(CoverageParser.parseInteger(total));
337+
public CoverageBuilder withTotal(final String total) {
338+
return withTotal(CoverageParser.parseInteger(total));
338339
}
339340

340341
/**
@@ -346,7 +347,7 @@ public CoverageBuilder setTotal(final String total) {
346347
* @return this
347348
*/
348349
@CanIgnoreReturnValue
349-
public CoverageBuilder setCovered(final int covered) {
350+
public CoverageBuilder withCovered(final int covered) {
350351
Ensure.that(covered >= 0).isTrue("No negative values allowed for covered items: %s", covered);
351352

352353
this.covered = covered;
@@ -363,8 +364,8 @@ public CoverageBuilder setCovered(final int covered) {
363364
* @return this
364365
*/
365366
@CanIgnoreReturnValue
366-
public CoverageBuilder setCovered(final String covered) {
367-
return setCovered(CoverageParser.parseInteger(covered));
367+
public CoverageBuilder withCovered(final String covered) {
368+
return withCovered(CoverageParser.parseInteger(covered));
368369
}
369370

370371
/**
@@ -376,7 +377,7 @@ public CoverageBuilder setCovered(final String covered) {
376377
* @return this
377378
*/
378379
@CanIgnoreReturnValue
379-
public CoverageBuilder setMissed(final int missed) {
380+
public CoverageBuilder withMissed(final int missed) {
380381
Ensure.that(missed >= 0).isTrue("No negative values allowed for missed items: %s", missed);
381382

382383
this.missed = missed;
@@ -393,8 +394,8 @@ public CoverageBuilder setMissed(final int missed) {
393394
* @return this
394395
*/
395396
@CanIgnoreReturnValue
396-
public CoverageBuilder setMissed(final String missed) {
397-
return setMissed(CoverageParser.parseInteger(missed));
397+
public CoverageBuilder withMissed(final String missed) {
398+
return withMissed(CoverageParser.parseInteger(missed));
398399
}
399400

400401
/**
@@ -460,7 +461,7 @@ public void incrementCovered() {
460461
* the amount to increment
461462
*/
462463
public void incrementCovered(final int amount) {
463-
setCovered(covered + amount);
464+
withCovered(covered + amount);
464465
}
465466

466467
/**
@@ -477,7 +478,7 @@ public void incrementMissed() {
477478
* the amount to increment
478479
*/
479480
public void incrementMissed(final int amount) {
480-
setMissed(missed + amount);
481+
withMissed(missed + amount);
481482
}
482483
}
483484
}

src/main/java/edu/hm/hafner/coverage/FileNode.java

+30-19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package edu.hm.hafner.coverage;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45
import java.util.Collections;
56
import java.util.List;
67
import java.util.Map;
@@ -104,6 +105,11 @@ public FileNode copy() {
104105
return file;
105106
}
106107

108+
@Override
109+
protected boolean filterByRelativePath(final Collection<String> fileNames) {
110+
return fileNames.contains(getRelativePath());
111+
}
112+
107113
@Override
108114
public boolean matches(final Metric searchMetric, final String searchName) {
109115
if (super.matches(searchMetric, searchName)) {
@@ -136,8 +142,8 @@ private void mergeCounters(final FileNode otherFile) {
136142
lines.addAll(coveredPerLine.keySet());
137143
lines.addAll(otherFile.coveredPerLine.keySet());
138144

139-
var lineCoverage = new CoverageBuilder().setMetric(Metric.LINE).setCovered(0).setMissed(0);
140-
var branchCoverage = new CoverageBuilder().setMetric(Metric.BRANCH).setCovered(0).setMissed(0);
145+
var lineCoverage = new CoverageBuilder().withMetric(Metric.LINE).withCovered(0).withMissed(0);
146+
var branchCoverage = new CoverageBuilder().withMetric(Metric.BRANCH).withCovered(0).withMissed(0);
141147
for (int line : lines) {
142148
int leftCovered = coveredPerLine.get(line);
143149
int leftMissed = missedPerLine.get(line);
@@ -253,9 +259,9 @@ protected Optional<Node> filterTreeByModifiedLines() {
253259

254260
private void filterLineAndBranchCoverage(final FileNode copy) {
255261
var lineCoverage = Coverage.nullObject(Metric.LINE);
256-
var lineBuilder = new CoverageBuilder().setMetric(Metric.LINE);
262+
var lineBuilder = new CoverageBuilder().withMetric(Metric.LINE);
257263
var branchCoverage = Coverage.nullObject(Metric.BRANCH);
258-
var branchBuilder = new CoverageBuilder().setMetric(Metric.BRANCH);
264+
var branchBuilder = new CoverageBuilder().withMetric(Metric.BRANCH);
259265
for (int line : getCoveredAndModifiedLines()) {
260266
var covered = coveredPerLine.getOrDefault(line, 0);
261267
var missed = missedPerLine.getOrDefault(line, 0);
@@ -265,13 +271,13 @@ private void filterLineAndBranchCoverage(final FileNode copy) {
265271
throw new IllegalArgumentException("No coverage for line " + line);
266272
}
267273
else if (total == 1) {
268-
lineCoverage = lineCoverage.add(lineBuilder.setCovered(covered).setMissed(missed).build());
274+
lineCoverage = lineCoverage.add(lineBuilder.withCovered(covered).withMissed(missed).build());
269275
}
270276
else {
271277
var branchCoveredAsLine = covered > 0 ? 1 : 0;
272278
lineCoverage = lineCoverage.add(
273-
lineBuilder.setCovered(branchCoveredAsLine).setMissed(1 - branchCoveredAsLine).build());
274-
branchCoverage = branchCoverage.add(branchBuilder.setCovered(covered).setMissed(missed).build());
279+
lineBuilder.withCovered(branchCoveredAsLine).withMissed(1 - branchCoveredAsLine).build());
280+
branchCoverage = branchCoverage.add(branchBuilder.withCovered(covered).withMissed(missed).build());
275281
}
276282
}
277283
addLineAndBranchCoverage(copy, lineCoverage, branchCoverage);
@@ -280,7 +286,7 @@ else if (total == 1) {
280286
private void filterMutations(final FileNode copy) {
281287
mutations.stream().filter(mutation -> modifiedLines.contains(mutation.getLine())).forEach(copy::addMutation);
282288
if (!copy.mutations.isEmpty()) {
283-
var builder = new CoverageBuilder().setMetric(Metric.MUTATION).setMissed(0).setCovered(0);
289+
var builder = new CoverageBuilder().withMetric(Metric.MUTATION).withMissed(0).withCovered(0);
284290
copy.mutations.stream().filter(Mutation::isDetected).forEach(mutation -> builder.incrementCovered());
285291
copy.mutations.stream()
286292
.filter(Predicate.not(Mutation::isDetected))
@@ -323,26 +329,26 @@ protected Optional<Node> filterTreeByIndirectChanges() {
323329
}
324330
var builder = new CoverageBuilder();
325331
if (delta > 0) {
326-
// the line is fully covered - even in case of branch coverage
332+
// the line is fully covered - even in the case of branch coverage
327333
if (delta == currentCoverage.getCovered()) {
328-
builder.setMetric(Metric.LINE).setCovered(1).setMissed(0);
334+
builder.withMetric(Metric.LINE).withCovered(1).withMissed(0);
329335
lineCoverage = lineCoverage.add(builder.build());
330336
}
331337
// the branch coverage increased for 'delta' hits
332338
if (currentCoverage.getTotal() > 1) {
333-
builder.setMetric(Metric.BRANCH).setCovered(delta).setMissed(0);
339+
builder.withMetric(Metric.BRANCH).withCovered(delta).withMissed(0);
334340
branchCoverage = branchCoverage.add(builder.build());
335341
}
336342
}
337343
else if (delta < 0) {
338344
// the line is not covered anymore
339345
if (currentCoverage.getCovered() == 0) {
340-
builder.setMetric(Metric.LINE).setCovered(0).setMissed(1);
346+
builder.withMetric(Metric.LINE).withCovered(0).withMissed(1);
341347
lineCoverage = lineCoverage.add(builder.build());
342348
}
343349
// the branch coverage is decreased by 'delta' hits
344350
if (currentCoverage.getTotal() > 1) {
345-
builder.setMetric(Metric.BRANCH).setCovered(0).setMissed(Math.abs(delta));
351+
builder.withMetric(Metric.BRANCH).withCovered(0).withMissed(Math.abs(delta));
346352
branchCoverage = branchCoverage.add(builder.build());
347353
}
348354
}
@@ -388,9 +394,9 @@ public boolean hasCoverageForLine(final int line) {
388394
private Coverage getLineCoverage(final int line) {
389395
if (hasCoverageForLine(line)) {
390396
var covered = getCoveredOfLine(line) > 0 ? 1 : 0;
391-
return new CoverageBuilder().setMetric(Metric.LINE)
392-
.setCovered(covered)
393-
.setMissed(1 - covered)
397+
return new CoverageBuilder().withMetric(Metric.LINE)
398+
.withCovered(covered)
399+
.withMissed(1 - covered)
394400
.build();
395401
}
396402
return Coverage.nullObject(Metric.LINE);
@@ -401,9 +407,9 @@ private Coverage getBranchCoverage(final int line) {
401407
var covered = getCoveredOfLine(line);
402408
var missed = getMissedOfLine(line);
403409
if (covered + missed > 1) {
404-
return new CoverageBuilder().setMetric(Metric.BRANCH)
405-
.setCovered(covered)
406-
.setMissed(missed)
410+
return new CoverageBuilder().withMetric(Metric.BRANCH)
411+
.withCovered(covered)
412+
.withMissed(missed)
407413
.build();
408414
}
409415
}
@@ -722,6 +728,11 @@ public void setRelativePath(final TreeString relativePath) {
722728
this.relativePath = relativePath;
723729
}
724730

731+
@Override
732+
public boolean isAggregation() {
733+
return false;
734+
}
735+
725736
@Override
726737
public boolean equals(final Object o) {
727738
if (this == o) {

src/main/java/edu/hm/hafner/coverage/MethodNode.java

+5
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ public String getMethodName() {
8080
return methodName;
8181
}
8282

83+
@Override
84+
public boolean isAggregation() {
85+
return false;
86+
}
87+
8388
@Override
8489
public boolean equals(final Object o) {
8590
if (this == o) {

src/main/java/edu/hm/hafner/coverage/Metric.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,12 @@ public boolean isAggregatingChildren() {
139139

140140
protected Optional<Value> getMetricOf(final Node node, final Metric searchMetric) {
141141
if (node.getMetric().equals(searchMetric)) {
142-
var builder = new CoverageBuilder().setMetric(searchMetric);
142+
var builder = new CoverageBuilder().withMetric(searchMetric);
143143
if (hasCoverage(node)) {
144-
builder.setCovered(1).setMissed(0);
144+
builder.withCovered(1).withMissed(0);
145145
}
146146
else {
147-
builder.setCovered(0).setMissed(1);
147+
builder.withCovered(0).withMissed(1);
148148
}
149149
return Optional.of(builder.build());
150150
}

src/main/java/edu/hm/hafner/coverage/ModuleNode.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public void splitPackages() {
9898
private void mergeSinglePackage(final Node packageNode) {
9999
for (Node existing : getChildren()) {
100100
if (isEqual(packageNode, existing)) {
101-
// replace existing with merged two nodes
101+
// replace the existing node with the merged nodes
102102
removeChild(existing);
103103
Node merged = existing.merge(packageNode);
104104
addChild(merged);
@@ -150,6 +150,11 @@ public PackageNode findOrCreatePackageNode(final String packageName) {
150150
return findPackage(normalizedPackageName).orElseGet(() -> createPackageNode(normalizedPackageName));
151151
}
152152

153+
@Override
154+
public boolean isAggregation() {
155+
return true;
156+
}
157+
153158
@Override
154159
public boolean equals(final Object o) {
155160
if (this == o) {

0 commit comments

Comments
 (0)