diff options
author | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-02-09 17:23:05 +0400 |
---|---|---|
committer | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-02-09 18:48:53 +0400 |
commit | 90a3277d3f57a4414fc6bbc48986345d56af23b6 (patch) | |
tree | 55e78d0b2fa1861d5827ca82bf5ad3913edb8aac /plugins | |
parent | efaa03159609208211d8271e2db44c847b1ea7c8 (diff) | |
download | sonarqube-90a3277d3f57a4414fc6bbc48986345d56af23b6.tar.gz sonarqube-90a3277d3f57a4414fc6bbc48986345d56af23b6.zip |
SONAR-3209,SONAR-3210 Provide API to save and retrieve measures by line
+ Use this API to save LoC in Java files
Diffstat (limited to 'plugins')
2 files changed, 18 insertions, 23 deletions
diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/FileLinesVisitor.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/FileLinesVisitor.java index 31202f01d51..3c1788cba46 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/FileLinesVisitor.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/FileLinesVisitor.java @@ -22,8 +22,7 @@ package org.sonar.java.ast.visitor; import com.puppycrawl.tools.checkstyle.api.DetailAST; import org.sonar.api.batch.SquidUtils; import org.sonar.api.measures.CoreMetrics; -import org.sonar.api.measures.Measure; -import org.sonar.api.measures.PersistenceMode; +import org.sonar.api.measures.FileLinesContext; import org.sonar.api.resources.JavaFile; import org.sonar.plugins.squid.SonarAccessor; import org.sonar.squid.api.SourceFile; @@ -31,7 +30,7 @@ import org.sonar.squid.measures.Metric; import org.sonar.squid.text.Source; /** - * Saves information about lines directly into {@link org.sonar.api.batch.SensorContext}. + * Saves information about lines directly into Sonar index by using {@link FileLinesContext}. */ public class FileLinesVisitor extends JavaAstVisitor { @@ -57,21 +56,15 @@ public class FileLinesVisitor extends JavaAstVisitor { private void processFile() { SourceFile file = (SourceFile) peekSourceCode(); + JavaFile javaFile = SquidUtils.convertJavaFileKeyFromSquidFormat(file.getKey()); + FileLinesContext measures = sonarAccessor.getSensorContext().createFileLinesContext(javaFile); + Source source = getSource(); - StringBuilder data = new StringBuilder(); for (int line = 1; line <= source.getNumberOfLines(); line++) { int linesOfCode = source.getMeasure(Metric.LINES_OF_CODE, line, line); - if (linesOfCode == 1) { - if (data.length() > 0) { - data.append(','); - } - data.append(line); - } + measures.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode); } - JavaFile javaFile = SquidUtils.convertJavaFileKeyFromSquidFormat(file.getKey()); - Measure measure = new Measure(CoreMetrics.NCLOC_DATA, data.toString()) - .setPersistenceMode(PersistenceMode.DATABASE); - sonarAccessor.getSensorContext().saveMeasure(javaFile, measure); + measures.save(); } } diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/visitor/FileLinesVisitorTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/visitor/FileLinesVisitorTest.java index 75edd60fb84..eb2d0808932 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/visitor/FileLinesVisitorTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/visitor/FileLinesVisitorTest.java @@ -24,8 +24,7 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import org.sonar.api.batch.SensorContext; import org.sonar.api.measures.CoreMetrics; -import org.sonar.api.measures.Measure; -import org.sonar.api.measures.PersistenceMode; +import org.sonar.api.measures.FileLinesContext; import org.sonar.api.resources.Resource; import org.sonar.java.ast.JavaAstScanner; import org.sonar.java.ast.SquidTestUtils; @@ -41,26 +40,29 @@ public class FileLinesVisitorTest { private Squid squid; private SensorContext context; + private FileLinesContext measures; @Before public void setUp() { squid = new Squid(new JavaSquidConfiguration()); context = mock(SensorContext.class); + measures = mock(FileLinesContext.class); } @Test public void analyseTestNcloc() { + ArgumentCaptor<Resource> resourceCaptor = ArgumentCaptor.forClass(Resource.class); + when(context.createFileLinesContext(resourceCaptor.capture())) + .thenReturn(measures); + squid.register(SonarAccessor.class).setSensorContext(context); squid.register(JavaAstScanner.class).scanFile(SquidTestUtils.getInputFile("/metrics/ncloc/TestNcloc.java")); - ArgumentCaptor<Resource> resourceCaptor = ArgumentCaptor.forClass(Resource.class); - ArgumentCaptor<Measure> measureCaptor = ArgumentCaptor.forClass(Measure.class); - verify(context, times(1)).saveMeasure(resourceCaptor.capture(), measureCaptor.capture()); assertThat(resourceCaptor.getValue().getKey(), is("[default].TestNcloc")); - Measure measure = measureCaptor.getValue(); - assertThat(measure.getMetricKey(), is(CoreMetrics.NCLOC_DATA_KEY)); - assertThat(measure.getPersistenceMode(), is(PersistenceMode.DATABASE)); - assertThat(measure.getData(), is("1,3,4,5,6,7,8,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,32,39")); + verify(measures).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 1, 1); + verify(measures).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 2, 0); + verify(measures).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 3, 1); + verify(measures).save(); } } |