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 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"; + } +} 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 ); }