Skip to content

Commit 8c14c74

Browse files
authored
Merge pull request #1984 from jenkinsci/use-id-from-result
[JENKINS-75438] Store parser ID directly in `AnalysisResult`
2 parents f9b07cd + 9b00858 commit 8c14c74

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

plugin/src/main/java/io/jenkins/plugins/analysis/core/model/AnalysisResult.java

+26-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
package io.jenkins.plugins.analysis.core.model; // NOPMD
22

3+
import org.apache.commons.lang3.StringUtils;
4+
import org.eclipse.collections.api.list.ImmutableList;
5+
import org.eclipse.collections.impl.factory.Lists;
6+
import org.eclipse.collections.impl.factory.Maps;
7+
8+
import edu.hm.hafner.analysis.Report;
9+
import edu.hm.hafner.analysis.Severity;
10+
import edu.hm.hafner.echarts.Build;
11+
import edu.hm.hafner.util.VisibleForTesting;
12+
import edu.umd.cs.findbugs.annotations.CheckForNull;
13+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
14+
15+
import java.io.Serial;
316
import java.io.Serializable;
417
import java.lang.ref.WeakReference;
518
import java.nio.file.Path;
@@ -14,18 +27,6 @@
1427
import java.util.regex.Matcher;
1528
import java.util.regex.Pattern;
1629

17-
import org.apache.commons.lang3.StringUtils;
18-
import org.eclipse.collections.api.list.ImmutableList;
19-
import org.eclipse.collections.impl.factory.Lists;
20-
import org.eclipse.collections.impl.factory.Maps;
21-
22-
import edu.hm.hafner.analysis.Report;
23-
import edu.hm.hafner.analysis.Severity;
24-
import edu.hm.hafner.echarts.Build;
25-
import edu.hm.hafner.util.VisibleForTesting;
26-
import edu.umd.cs.findbugs.annotations.CheckForNull;
27-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28-
2930
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
3031
import hudson.model.Run;
3132

@@ -50,15 +51,17 @@
5051
* @author Ullrich Hafner
5152
*/
5253
@SuppressFBWarnings(value = "SE, DESERIALIZATION_GADGET", justification = "transient fields are restored using a Jenkins callback (or are checked for null)")
53-
@SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessiveClassLength", "PMD.GodClass", "checkstyle:ClassFanOutComplexity", "checkstyle:ClassDataAbstractionCoupling"})
54+
@SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessiveClassLength", "PMD.GodClass", "PMD.CyclomaticComplexity", "checkstyle:ClassFanOutComplexity", "checkstyle:ClassDataAbstractionCoupling"})
5455
public class AnalysisResult implements Serializable, StaticAnalysisRun {
56+
@Serial
5557
private static final long serialVersionUID = 1110545450292087475L;
5658

5759
private static final Pattern ISSUES_FILE_NAME = Pattern.compile("issues.xml", Pattern.LITERAL);
5860
private static final int NO_BUILD = -1;
5961
private static final String NO_REFERENCE = StringUtils.EMPTY;
6062

6163
private final String id;
64+
private /* almost final */ String parserId;
6265

6366
private IssuesStatistics totals;
6467

@@ -227,8 +230,10 @@ protected AnalysisResult(final Run<?, ?> owner, final String id, final DeltaRepo
227230
this.owner = owner;
228231

229232
Report allIssues = report.getAllIssues();
233+
230234
new ValidationUtilities().ensureValidId(id);
231235
this.id = id;
236+
this.parserId = allIssues.getParserId();
232237

233238
totals = report.getStatistics();
234239
this.sizePerOrigin = new HashMap<>(sizePerOrigin);
@@ -265,13 +270,17 @@ protected AnalysisResult(final Run<?, ?> owner, final String id, final DeltaRepo
265270
*
266271
* @return this
267272
*/
273+
@Serial
268274
protected Object readResolve() {
269275
if (qualityGateResult == null && qualityGateStatus != null) {
270276
qualityGateResult = new QualityGateResult(qualityGateStatus);
271277
}
272278
if (totals == null) {
273279
totals = new IssuesStatisticsBuilder().build();
274280
}
281+
if (parserId == null) {
282+
parserId = id; // fallback for old data
283+
}
275284
return this;
276285
}
277286

@@ -353,6 +362,10 @@ public String getId() {
353362
return id;
354363
}
355364

365+
String getParserId() {
366+
return parserId;
367+
}
368+
356369
@Override
357370
public Run<?, ?> getOwner() {
358371
return owner;

plugin/src/main/java/io/jenkins/plugins/analysis/core/model/ResultAction.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
@SuppressWarnings("ClassFanOutComplexity")
4444
@SuppressFBWarnings(value = "SE", justification = "transient field owner ist restored using a Jenkins callback")
4545
public class ResultAction implements HealthReportingAction, LastBuildAction, RunAction2, StaplerProxy, Serializable {
46+
@Serial
4647
private static final long serialVersionUID = 6683647181785654908L;
4748

4849
private transient Run<?, ?> owner;
@@ -317,13 +318,17 @@ public StaticAnalysisLabelProvider getLabelProvider() {
317318
}
318319

319320
private String getParserId() {
320-
var originalReport = getResult().getIssues();
321-
if (originalReport.hasParserId()) {
322-
return originalReport.getParserId();
321+
var parserId = getResult().getParserId();
322+
if (isValidId(parserId)) {
323+
return parserId;
323324
}
324325
return id;
325326
}
326327

328+
private boolean isValidId(final String parserId) {
329+
return StringUtils.isNotBlank(parserId) && !"-".equals(parserId);
330+
}
331+
327332
/**
328333
* Returns the detail view for issues for all Stapler requests.
329334
*
@@ -335,7 +340,7 @@ public IssuesDetail getTarget() {
335340
}
336341

337342
/**
338-
* Empty method as workaround for Stapler bug: JavaScript method in target object is not found.
343+
* Empty method as workaround for Stapler bug: JavaScript method in the target object is not found.
339344
*
340345
* @return unused string (since Firefox requires that Ajax calls return something)
341346
*/

0 commit comments

Comments
 (0)