From 90654bdd16c41577154c8a36f18ce8c0e231a72c Mon Sep 17 00:00:00 2001 From: Martin Naumann Date: Sun, 24 Feb 2013 21:50:54 +0100 Subject: [PATCH 1/3] Adjusted Sonar runtime version in pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ef81010..9ba11e4 100644 --- a/pom.xml +++ b/pom.xml @@ -45,9 +45,9 @@ - 2.7 + 3.4.1 com.pica.sonarplugins.ruby.RubyPlugin - 2.7 + 3.4.1 Ruby From a43aea5bf3753221398f971b0e06fc4144fe92a4 Mon Sep 17 00:00:00 2001 From: Martin Naumann Date: Sun, 24 Feb 2013 22:10:52 +0100 Subject: [PATCH 2/3] Adding Flog Sensor --- src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java b/src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java index 5b187ac..10463b4 100644 --- a/src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java +++ b/src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java @@ -4,6 +4,7 @@ import com.pica.sonarplugins.ruby.core.RubySourceCodeColorizer; import com.pica.sonarplugins.ruby.core.RubySourceImporter; import com.pica.sonarplugins.ruby.rcov.RcovSensor; +import com.centralway.rubymetrics.FlogSensor; import org.sonar.api.Plugin; import org.sonar.api.Properties; @@ -32,7 +33,8 @@ public List getExtensions() { RubySensor.class, RubySourceImporter.class, RubySourceCodeColorizer.class, - RcovSensor.class + RcovSensor.class, + FlogSensor.class ); } From d0f35c8af418f5420a23988c9b25682a8f8d0c1c Mon Sep 17 00:00:00 2001 From: Martin Naumann Date: Sun, 24 Feb 2013 22:13:35 +0100 Subject: [PATCH 3/3] Added initial version of the FlogSensor --- .../centralway/rubymetrics/FlogSensor.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/com/centralway/rubymetrics/FlogSensor.java diff --git a/src/main/java/com/centralway/rubymetrics/FlogSensor.java b/src/main/java/com/centralway/rubymetrics/FlogSensor.java new file mode 100644 index 0000000..9241544 --- /dev/null +++ b/src/main/java/com/centralway/rubymetrics/FlogSensor.java @@ -0,0 +1,67 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.centralway.rubymetrics; + +import com.pica.sonarplugins.ruby.core.RubyFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.sonar.api.batch.Sensor; +import org.sonar.api.batch.SensorContext; +import org.sonar.api.measures.CoreMetrics; +import org.sonar.api.resources.Project; +import org.sonar.api.resources.ProjectFileSystem; +import org.sonar.api.resources.File; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.LineIterator; +import org.apache.commons.lang.StringUtils; + +import java.util.List; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.io.IOException; +import java.util.Map; + + +/** + * + * @author martin.naumann + */ +public class FlogSensor implements Sensor { + + private static final Logger LOG = LoggerFactory.getLogger(FlogSensor.class); + + public boolean shouldExecuteOnProject(Project project) { + return true; + } + + public void analyse(Project project, SensorContext context) { + try { + processReport(project, context); + } catch(IOException e) { + LOG.error("Flog report could not be parsed properly!"); + LOG.error(e.getMessage()); + } + } + + private void processReport(Project project, SensorContext context) throws IOException { + LineIterator lineIter = FileUtils.lineIterator(new java.io.File("flog.txt")); + + context.saveMeasure(project, CoreMetrics.FUNCTION_COMPLEXITY, getAverageScorePerMethod(lineIter)); + } + + private double getAverageScorePerMethod(LineIterator lineIter) { + lineIter.nextLine(); // Skip the total score + Double averagePerMethod = Double.parseDouble(lineIter.nextLine().split(":")[0]); + lineIter.nextLine(); //There is an empty line that we wanna skip. + return averagePerMethod; + } + + @Override + public String toString() { + return "Ruby Flog report sensor"; + } +}