summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2012-02-09 17:23:05 +0400
committerEvgeny Mandrikov <mandrikov@gmail.com>2012-02-09 18:48:53 +0400
commit90a3277d3f57a4414fc6bbc48986345d56af23b6 (patch)
tree55e78d0b2fa1861d5827ca82bf5ad3913edb8aac /plugins
parentefaa03159609208211d8271e2db44c847b1ea7c8 (diff)
downloadsonarqube-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')
-rw-r--r--plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/FileLinesVisitor.java21
-rw-r--r--plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/visitor/FileLinesVisitorTest.java20
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();
}
}