]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6253 Add lines count in report
authorJulien HENRY <julien.henry@sonarsource.com>
Tue, 7 Apr 2015 12:56:25 +0000 (14:56 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Tue, 7 Apr 2015 12:57:04 +0000 (14:57 +0200)
sonar-batch/src/main/java/org/sonar/batch/report/ComponentsPublisher.java
sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java
sonar-batch/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java
sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java

index 7bed3e9db12299d3a5fd13a581c3481be22078c6..fb20efee12823553397d84bda9df1b38b3c3b518 100644 (file)
@@ -23,6 +23,7 @@ import org.apache.commons.lang.StringUtils;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
+import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.resources.ResourceUtils;
@@ -83,6 +84,7 @@ public class ComponentsPublisher implements ReportPublisherStep {
     }
     if (ResourceUtils.isFile(r)) {
       builder.setIsTest(ResourceUtils.isUnitTestClass(r));
+      builder.setLines(((InputFile) batchResource.inputPath()).lines());
     }
     String name = getName(r);
     if (name != null) {
index 54fd33a6f40a9636550db5cb05121e640e55f569..941f7d42f617527d0ca3d2c76ed9458b2c381b71 100644 (file)
@@ -26,7 +26,6 @@ import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.InputFile.Status;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.batch.sensor.Sensor;
 import org.sonar.api.batch.sensor.SensorContext;
 import org.sonar.api.batch.sensor.SensorDescriptor;
@@ -95,19 +94,19 @@ public final class ScmSensor implements Sensor {
     List<InputFile> filesToBlame = new LinkedList<InputFile>();
     for (InputFile f : fs.inputFiles(fs.predicates().all())) {
       if (configuration.forceReloadAll()) {
-        addIfNotEmpty(filesToBlame, (DefaultInputFile) f);
+        addIfNotEmpty(filesToBlame, f);
       } else {
         FileData fileData = projectReferentials.fileData(projectDefinition.getKeyWithBranch(), f.relativePath());
         if (f.status() != Status.SAME || fileData == null || fileData.needBlame()) {
-          addIfNotEmpty(filesToBlame, (DefaultInputFile) f);
+          addIfNotEmpty(filesToBlame, f);
         }
       }
     }
     return filesToBlame;
   }
 
-  private void addIfNotEmpty(List<InputFile> filesToBlame, DefaultInputFile f) {
-    if (!f.isEmpty()) {
+  private void addIfNotEmpty(List<InputFile> filesToBlame, InputFile f) {
+    if (f.lines() > 0) {
       filesToBlame.add(f);
     }
   }
index 812d81103396083e1dfa6f911a4fbdb82d1095d0..5e806339a8953831eaaa5ecedbe794d3e06570f2 100644 (file)
@@ -26,6 +26,7 @@ import org.junit.rules.TemporaryFolder;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
+import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.resources.Directory;
 import org.sonar.api.resources.Java;
@@ -36,9 +37,7 @@ import org.sonar.batch.protocol.Constants.ComponentLinkType;
 import org.sonar.batch.protocol.Constants.EventCategory;
 import org.sonar.batch.protocol.output.BatchReport.Component;
 import org.sonar.batch.protocol.output.BatchReport.Event;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
-import org.sonar.batch.protocol.output.FileStructure;
+import org.sonar.batch.protocol.output.*;
 
 import java.io.File;
 import java.util.Arrays;
@@ -88,17 +87,17 @@ public class ComponentsPublisherTest {
     org.sonar.api.resources.File file = org.sonar.api.resources.File.create("src/Foo.java", Java.INSTANCE, false);
     file.setEffectiveKey("module1:src/Foo.java");
     file.setId(4).setUuid("FILE_UUID");
-    resourceCache.add(file, dir).setSnapshot(new Snapshot().setId(14));
+    resourceCache.add(file, dir).setSnapshot(new Snapshot().setId(14)).setInputPath(new DefaultInputFile("module1", "src/Foo.java").setLines(2));
 
     org.sonar.api.resources.File fileWithoutLang = org.sonar.api.resources.File.create("src/make", null, false);
     fileWithoutLang.setEffectiveKey("module1:src/make");
     fileWithoutLang.setId(5).setUuid("FILE_WITHOUT_LANG_UUID");
-    resourceCache.add(fileWithoutLang, dir).setSnapshot(new Snapshot().setId(15));
+    resourceCache.add(fileWithoutLang, dir).setSnapshot(new Snapshot().setId(15)).setInputPath(new DefaultInputFile("module1", "src/make").setLines(10));
 
     org.sonar.api.resources.File testFile = org.sonar.api.resources.File.create("test/FooTest.java", Java.INSTANCE, true);
     testFile.setEffectiveKey("module1:test/FooTest.java");
     testFile.setId(6).setUuid("TEST_FILE_UUID");
-    resourceCache.add(testFile, dir).setSnapshot(new Snapshot().setId(16));
+    resourceCache.add(testFile, dir).setSnapshot(new Snapshot().setId(16)).setInputPath(new DefaultInputFile("module1", "test/FooTest.java").setLines(4));
 
     File outputDir = temp.newFolder();
     BatchReportWriter writer = new BatchReportWriter(outputDir);
@@ -151,7 +150,7 @@ public class ComponentsPublisherTest {
     org.sonar.api.resources.File file = org.sonar.api.resources.File.create("src/Foo.java", Java.INSTANCE, false);
     file.setEffectiveKey("module1:my_branch:my_branch:src/Foo.java");
     file.setId(4).setUuid("FILE_UUID");
-    resourceCache.add(file, dir).setSnapshot(new Snapshot().setId(14));
+    resourceCache.add(file, dir).setSnapshot(new Snapshot().setId(14)).setInputPath(new DefaultInputFile("module1", "src/Foo.java").setLines(2));
 
     File outputDir = temp.newFolder();
     BatchReportWriter writer = new BatchReportWriter(outputDir);
index 83b4473fbea4fcdee03e1cfb3c159afd36bd1399..4f89a1c0dd32cde0f90a3af71cd64f76bda6c57d 100644 (file)
@@ -51,7 +51,6 @@ public class DefaultInputFile implements InputFile {
   private String hash;
   private int nonBlankLines;
   private int[] originalLineOffsets;
-  private boolean empty;
 
   public DefaultInputFile(String moduleKey, String relativePath) {
     this.moduleKey = moduleKey;
@@ -195,15 +194,6 @@ public class DefaultInputFile implements InputFile {
     return this;
   }
 
-  public boolean isEmpty() {
-    return this.empty;
-  }
-
-  public DefaultInputFile setEmpty(boolean empty) {
-    this.empty = empty;
-    return this;
-  }
-
   @Override
   public TextPointer newPointer(int line, int lineOffset) {
     DefaultTextPointer textPointer = new DefaultTextPointer(line, lineOffset);
@@ -261,7 +251,6 @@ public class DefaultInputFile implements InputFile {
     this.setNonBlankLines(metadata.nonBlankLines);
     this.setHash(metadata.hash);
     this.setOriginalLineOffsets(metadata.originalLineOffsets);
-    this.setEmpty(metadata.empty);
     return this;
   }
 
index d6ef257afa89e192bfbfe316941b0c7cb2af0761..40a0cb87d8941b3304acc93144df26e8cf296a44 100644 (file)
@@ -66,8 +66,7 @@ public class FileMetadata implements BatchComponent {
   }
 
   private static class LineCounter extends CharHandler {
-    private boolean empty = true;
-    private int lines = 1;
+    private int lines = 0;
     private int nonBlankLines = 0;
     private boolean blankLine = true;
     boolean alreadyLoggedInvalidCharacter = false;
@@ -81,7 +80,9 @@ public class FileMetadata implements BatchComponent {
 
     @Override
     void handleAll(char c) {
-      this.empty = false;
+      if (this.lines == 0) {
+        this.lines = 1;
+      }
       if (!alreadyLoggedInvalidCharacter && c == '\ufffd') {
         LOG.warn("Invalid character encountered in file {} at line {} for encoding {}. Please fix file content or configure the encoding to be used using property '{}'.", file,
           lines, encoding, CoreProperties.ENCODING_PROPERTY);
@@ -120,9 +121,6 @@ public class FileMetadata implements BatchComponent {
       return nonBlankLines;
     }
 
-    public boolean isEmpty() {
-      return empty;
-    }
   }
 
   private static class FileHashComputer extends CharHandler {
@@ -229,8 +227,7 @@ public class FileMetadata implements BatchComponent {
     LineOffsetCounter lineOffsetCounter = new LineOffsetCounter();
     readFile(file, encoding, lineCounter, fileHashComputer, lineOffsetCounter);
     return new Metadata(lineCounter.lines(), lineCounter.nonBlankLines(), fileHashComputer.getHash(), lineOffsetCounter.getOriginalLineOffsets(),
-      lineOffsetCounter.getLastValidOffset(),
-      lineCounter.isEmpty());
+      lineOffsetCounter.getLastValidOffset());
   }
 
   /**
@@ -246,8 +243,7 @@ public class FileMetadata implements BatchComponent {
       throw new IllegalStateException("Should never occurs", e);
     }
     return new Metadata(lineCounter.lines(), lineCounter.nonBlankLines(), fileHashComputer.getHash(), lineOffsetCounter.getOriginalLineOffsets(),
-      lineOffsetCounter.getLastValidOffset(),
-      lineCounter.isEmpty());
+      lineOffsetCounter.getLastValidOffset());
   }
 
   private static void readFile(File file, Charset encoding, CharHandler... handlers) {
@@ -304,13 +300,11 @@ public class FileMetadata implements BatchComponent {
     final String hash;
     final int[] originalLineOffsets;
     final int lastValidOffset;
-    final boolean empty;
 
-    private Metadata(int lines, int nonBlankLines, String hash, List<Integer> originalLineOffsets, int lastValidOffset, boolean empty) {
+    private Metadata(int lines, int nonBlankLines, String hash, List<Integer> originalLineOffsets, int lastValidOffset) {
       this.lines = lines;
       this.nonBlankLines = nonBlankLines;
       this.hash = hash;
-      this.empty = empty;
       this.originalLineOffsets = Ints.toArray(originalLineOffsets);
       this.lastValidOffset = lastValidOffset;
     }
index 7696c1afcbf3dbdd77be34999a061d3e6ebdb5fb..93f3a8e57d78b69a5d9acc23690615c5f77c5c23 100644 (file)
@@ -55,12 +55,11 @@ public class FileMetadataTest {
     FileUtils.touch(tempFile);
 
     FileMetadata.Metadata metadata = new FileMetadata().readMetadata(tempFile, Charsets.UTF_8);
-    assertThat(metadata.lines).isEqualTo(1);
+    assertThat(metadata.lines).isEqualTo(0);
     assertThat(metadata.nonBlankLines).isEqualTo(0);
     assertThat(metadata.hash).isNotEmpty();
     assertThat(metadata.originalLineOffsets).containsOnly(0);
     assertThat(metadata.lastValidOffset).isEqualTo(0);
-    assertThat(metadata.empty).isTrue();
   }
 
   @Test
@@ -74,7 +73,6 @@ public class FileMetadataTest {
     assertThat(metadata.hash).isEqualTo(md5Hex("foo\nbar\nbaz"));
     assertThat(metadata.originalLineOffsets).containsOnly(0, 5, 10);
     assertThat(metadata.lastValidOffset).isEqualTo(13);
-    assertThat(metadata.empty).isFalse();
   }
 
   @Test
@@ -263,7 +261,6 @@ public class FileMetadataTest {
     assertThat(metadata.lines).isEqualTo(135);
     assertThat(metadata.nonBlankLines).isEqualTo(134);
     assertThat(metadata.hash).isNotEmpty();
-    assertThat(metadata.empty).isFalse();
 
     assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains("Invalid character encountered in file");
     assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains(