diff --git a/.gitignore b/.gitignore index 2fea509..d0b2671 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ target/ *.iml *.ipr *.iws +nb-configuration.xml diff --git a/pom.xml b/pom.xml index 93c3c08..19fecef 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.jenkins-ci.plugins plugin - 1.450 + 1.584 @@ -24,6 +24,8 @@ UTF-8 UTF-8 UTF-8 + 1.7 + 1.7 @@ -95,6 +97,7 @@ org.jenkins-ci.main maven-plugin + 2.8 xpp3 diff --git a/src/main/java/hudson/plugins/violations/ViolationsReport.java b/src/main/java/hudson/plugins/violations/ViolationsReport.java index ea2a066..e4275c9 100644 --- a/src/main/java/hudson/plugins/violations/ViolationsReport.java +++ b/src/main/java/hudson/plugins/violations/ViolationsReport.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.File; import java.io.Serializable; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -532,17 +533,48 @@ private boolean isFailed() { /** * Set the unstable/failed status of a build based * on this violations report. + * + * Because of JENKINS-25406 we need to access this field via reflection. */ public void setBuildResult() { - if (isFailed()) { - build.setResult(Result.FAILURE); - return; + final Field resultField; + final Result result = build.getResult(); + try { + Class klass = build.getClass(); + resultField = getField(klass, "result"); + resultField.setAccessible(true); + if (isFailed()) { + if (result == null || result.isBetterThan(Result.FAILURE)) { + resultField.set(build, Result.FAILURE); + } + return; + } + if (isUnstable()) { + if (result == null || result.isBetterThan(Result.UNSTABLE)) { + resultField.set(build, Result.UNSTABLE); + } + } + } catch (NoSuchFieldException e) { + throw new RuntimeException("Could not get resultField from build.", e); + } catch (IllegalAccessException e) { + throw new RuntimeException("Could not set value for resultField.", e); } - if (isUnstable()) { - build.setResult(Result.UNSTABLE); + } + + // http://stackoverflow.com/a/735311/49132 + private static Field getField(Class clazz, String fieldName) throws NoSuchFieldException { + try { + return clazz.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + Class superClass = clazz.getSuperclass(); + if (superClass == null) { + throw e; + } else { + return getField(superClass, fieldName); + } } } - + private static final long serialVersionUID = 1L; public static ViolationsReport findViolationsReport( diff --git a/src/main/java/hudson/plugins/violations/graph/SeverityTypeDataSet.java b/src/main/java/hudson/plugins/violations/graph/SeverityTypeDataSet.java index 7ac238d..e184ce8 100644 --- a/src/main/java/hudson/plugins/violations/graph/SeverityTypeDataSet.java +++ b/src/main/java/hudson/plugins/violations/graph/SeverityTypeDataSet.java @@ -1,5 +1,6 @@ package hudson.plugins.violations.graph; +import hudson.model.Run; import org.jfree.data.category.CategoryDataset; import hudson.util.DataSetBuilder; @@ -81,15 +82,15 @@ public CategoryDataset buildDataSet() { nums[Severity.MEDIUM_VALUE] + nums[Severity.MEDIUM_HIGH_VALUE] + nums[Severity.MEDIUM_LOW_VALUE], MEDIUM_ROW, - new NumberOnlyBuildLabel(r.getBuild())); + new NumberOnlyBuildLabel((Run)r.getBuild())); builder.add( nums[Severity.HIGH_VALUE], HIGH_ROW, - new NumberOnlyBuildLabel(r.getBuild())); + new NumberOnlyBuildLabel((Run)r.getBuild())); builder.add( nums[Severity.LOW_VALUE], LOW_ROW, - new NumberOnlyBuildLabel(r.getBuild())); + new NumberOnlyBuildLabel((Run)r.getBuild())); } return builder.build(); } diff --git a/src/main/java/hudson/plugins/violations/hudson/AbstractViolationsBuildAction.java b/src/main/java/hudson/plugins/violations/hudson/AbstractViolationsBuildAction.java index 0862ab8..64e8353 100644 --- a/src/main/java/hudson/plugins/violations/hudson/AbstractViolationsBuildAction.java +++ b/src/main/java/hudson/plugins/violations/hudson/AbstractViolationsBuildAction.java @@ -6,6 +6,7 @@ import java.awt.Color; import java.awt.BasicStroke; +import hudson.model.*; import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.chart.renderer.category.LineAndShapeRenderer; @@ -24,12 +25,6 @@ import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerProxy; -import hudson.model.Action; -import hudson.model.Actionable; -import hudson.model.HealthReportingAction; -import hudson.model.HealthReport; -import hudson.model.AbstractBuild; - import hudson.util.ChartUtil; import hudson.util.DataSetBuilder; import hudson.util.ShiftedCategoryAxis; @@ -192,7 +187,7 @@ req, rsp, new SeverityTypeDataSet( for (ViolationsReport r: ViolationsReport.iteration(getBuild())) { ChartUtil.NumberOnlyBuildLabel label - = new ChartUtil.NumberOnlyBuildLabel(r.getBuild()); + = new ChartUtil.NumberOnlyBuildLabel((Run)r.getBuild()); for (String ty: r.getViolations().keySet()) { dsb.add(roundUp(r.getViolations().get(ty)), ty, label); }