Skip to content
This repository has been archived by the owner on Apr 6, 2022. It is now read-only.

Commit

Permalink
[FIXED JENKINS-31421] Added a new graph that shows the number of dupl…
Browse files Browse the repository at this point in the history
…icated lines.
  • Loading branch information
uhafner committed May 10, 2016
1 parent 5baeae8 commit 4ea956f
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 2 deletions.
12 changes: 11 additions & 1 deletion src/main/java/hudson/plugins/dry/DryProjectAction.java
@@ -1,8 +1,11 @@
package hudson.plugins.dry;

import java.util.List;

import hudson.model.AbstractProject;
import hudson.plugins.analysis.core.ResultAction;
import hudson.plugins.analysis.core.AbstractProjectAction;
import hudson.plugins.analysis.core.ResultAction;
import hudson.plugins.analysis.graph.BuildResultGraph;

/**
* Entry point to visualize the DRY trend graph in the project screen. Drawing
Expand Down Expand Up @@ -33,5 +36,12 @@ public DryProjectAction(final AbstractProject<?, ?> project, final Class<? exten
super(project, type, Messages._DRY_ProjectAction_Name(), Messages._DRY_Trend_Name(),
DryDescriptor.PLUGIN_ID, DryDescriptor.ICON_URL, DryDescriptor.RESULT_URL);
}

@Override
protected List<BuildResultGraph> getAvailableGraphs() {
List<BuildResultGraph> availableGraphs = super.getAvailableGraphs();
availableGraphs.add(0, new DuplicatedLinesGraph());
return availableGraphs;
}
}

19 changes: 19 additions & 0 deletions src/main/java/hudson/plugins/dry/DryResult.java
Expand Up @@ -7,6 +7,7 @@
import hudson.plugins.analysis.core.BuildResult;
import hudson.plugins.analysis.core.ParserResult;
import hudson.plugins.analysis.core.ResultAction;
import hudson.plugins.analysis.util.model.FileAnnotation;
import hudson.plugins.dry.parser.DuplicateCode;

/**
Expand All @@ -18,6 +19,8 @@
public class DryResult extends BuildResult {
private static final long serialVersionUID = 2768250056765266658L;

private int totalNumberOfDuplicatedLines;

/**
* Creates a new instance of {@link DryResult}.
*
Expand Down Expand Up @@ -69,6 +72,13 @@ protected DryResult(final Run<?, ?> build, final String defaultEncoding, final P
final String defaultEncoding, final boolean canSerialize) {
super(build, history, result, defaultEncoding);

for (FileAnnotation annotation : result.getAnnotations()) {
if (annotation instanceof DuplicateCode) {
DuplicateCode dry = (DuplicateCode) annotation;
totalNumberOfDuplicatedLines += dry.getNumberOfLines();
}
}

if (canSerialize) {
serializeAnnotations(result.getAnnotations());
}
Expand Down Expand Up @@ -109,4 +119,13 @@ public String getDisplayName() {
protected Class<? extends ResultAction<? extends BuildResult>> getResultActionType() {
return DryResultAction.class;
}

/**
* Returns the total number of duplicated lines. Each duplication in each file is counted once.
*
* @return total number of duplicated lines
*/
public int getTotalNumberOfDuplicatedLines() {
return totalNumberOfDuplicatedLines;
}
}
58 changes: 58 additions & 0 deletions src/main/java/hudson/plugins/dry/DuplicatedLinesGraph.java
@@ -0,0 +1,58 @@
package hudson.plugins.dry;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;

import hudson.plugins.analysis.core.BuildResult;
import hudson.plugins.analysis.graph.CategoryBuildResultGraph;
import hudson.plugins.analysis.graph.ColorPalette;
import hudson.plugins.analysis.graph.GraphConfiguration;
import hudson.plugins.analysis.util.ToolTipProvider;

/**
* Builds a graph showing the total number of duplicated lines in a line graph.
*
* @author Ulli Hafner
*/
public class DuplicatedLinesGraph extends CategoryBuildResultGraph {
@Override
public String getId() {
return "DUPLINES";
}

@Override
public String getLabel() {
return Messages.Trend_type_duplicated_lines();
}

// FIXME: analysis-core 2.0: use real type
@Override
protected List<Integer> computeSeries(final BuildResult current) {
List<Integer> series = new ArrayList<Integer>();
if (current instanceof DryResult) {
series.add(((DryResult) current).getTotalNumberOfDuplicatedLines());
}
return series;
}

@Override
protected JFreeChart createChart(final CategoryDataset dataSet) {
return createLineGraph(dataSet, false);
}

@Override
protected Color[] getColors() {
return new Color[] {ColorPalette.BLUE};
}

@Override
protected CategoryItemRenderer createRenderer(final GraphConfiguration configuration, final String pluginName, final ToolTipProvider toolTipProvider) {
return createLineRenderer();
}
}

2 changes: 2 additions & 0 deletions src/main/resources/hudson/plugins/dry/Messages.properties
Expand Up @@ -31,3 +31,5 @@ Portlet.WarningsTable=Duplicate code per project
Portlet.WarningsPriorityGraph=Duplicate code trend graph (priority distribution)
Portlet.WarningsNewVsFixedGraph=Duplicate code trend graph (new vs. fixed)
Portlet.WarningsTotalsGraph=Duplicate code trend graph (totals)

Trend_type_duplicated_lines=Total number of duplicated lines
4 changes: 3 additions & 1 deletion src/main/resources/hudson/plugins/dry/Messages_de.properties
Expand Up @@ -30,4 +30,6 @@ DRY.ValidationError.NormalThreshold=Der Grenzwert muss eine ganze Zahl gr
Portlet.WarningsTable=Duplizierter Quelltext pro Projekt
Portlet.WarningsPriorityGraph=Duplizierter Quelltext Trend Graph (Verteilung nach Priorität)
Portlet.WarningsNewVsFixedGraph=Duplizierter Quelltext Trend Graph (Verhältnis von neu zu behoben)
Portlet.WarningsTotalsGraph=Duplizierter Quelltext Trend Graph (Gesamtanzahl)
Portlet.WarningsTotalsGraph=Duplizierter Quelltext Trend Graph (Gesamtanzahl)

Trend_type_duplicated_lines=Gesamtzahl an duplizierten Zeilen

0 comments on commit 4ea956f

Please sign in to comment.