From: Julien HENRY Date: Tue, 28 Jan 2014 19:57:40 +0000 (+0100) Subject: SONAR-926 Improve FileLineContextFactory to support InputFile X-Git-Tag: 4.2~396 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=472ec163c6b9a69ee64597abea99392e776c1f9e;p=sonarqube.git SONAR-926 Improve FileLineContextFactory to support InputFile --- diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContext.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContext.java index 22ca76671f4..35e841b39d3 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContext.java @@ -118,8 +118,8 @@ public class DefaultFileLinesContext implements FileLinesContext { if (shouldSave(lines)) { String data = KeyValueFormat.format(lines); Measure measure = new Measure(metricKey) - .setPersistenceMode(PersistenceMode.DATABASE) - .setData(data); + .setPersistenceMode(PersistenceMode.DATABASE) + .setData(data); index.addMeasure(resource, measure); entry.setValue(ImmutableMap.copyOf(lines)); } @@ -149,8 +149,8 @@ public class DefaultFileLinesContext implements FileLinesContext { @Override public String toString() { return Objects.toStringHelper(this) - .add("map", map) - .toString(); + .add("map", map) + .toString(); } } diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java index 13d53e1ba9a..bc05a5d6004 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java +++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java @@ -22,20 +22,43 @@ package org.sonar.batch; import org.sonar.api.batch.SonarIndex; import org.sonar.api.measures.FileLinesContext; import org.sonar.api.measures.FileLinesContextFactory; +import org.sonar.api.resources.File; +import org.sonar.api.resources.Java; +import org.sonar.api.resources.JavaFile; +import org.sonar.api.resources.Languages; import org.sonar.api.resources.Resource; +import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.internal.DefaultInputFile; public class DefaultFileLinesContextFactory implements FileLinesContextFactory { private final SonarIndex index; + private Languages languages; - public DefaultFileLinesContextFactory(SonarIndex index) { + public DefaultFileLinesContextFactory(SonarIndex index, Languages languages) { this.index = index; + this.languages = languages; } + @Override public FileLinesContext createFor(Resource resource) { // Reload resource in case it use deprecated key resource = index.getResource(resource); return new DefaultFileLinesContext(index, resource); } + @Override + public FileLinesContext createFor(InputFile inputFile) { + // FIXME remove that once DefaultFileLinesContext accept an InputFile + String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE); + boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE)); + Resource sonarFile; + if (Java.KEY.equals(languageKey)) { + sonarFile = JavaFile.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest); + } else { + sonarFile = File.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), languages.get(languageKey), unitTest); + } + return new DefaultFileLinesContext(index, sonarFile); + } + } diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/ResourcePersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/ResourcePersister.java index 100c8b34273..de12c23e87c 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/index/ResourcePersister.java +++ b/sonar-batch/src/main/java/org/sonar/batch/index/ResourcePersister.java @@ -19,11 +19,10 @@ */ package org.sonar.batch.index; -import org.sonar.api.scan.filesystem.InputFile; - import org.sonar.api.database.model.Snapshot; import org.sonar.api.resources.Project; import org.sonar.api.resources.Resource; +import org.sonar.api.scan.filesystem.InputFile; public interface ResourcePersister { @@ -46,7 +45,7 @@ public interface ResourcePersister { Snapshot getSnapshotOrFail(InputFile resource); /** - * The current snapshot which is flagged as "last", different then the current analysis. + * The current snapshot which is flagged as "last", different than the current analysis. * @param onlyOlder true if the result must be anterior to the snapshot parameter */ Snapshot getLastSnapshot(Snapshot snapshot, boolean onlyOlder); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java index 989a4177cda..ded6dc9dcde 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java @@ -28,24 +28,24 @@ import org.sonar.api.resources.Project; * generally used to add measure at the lowest level of the resource tree. A sensor can access and save measures on the whole tree of * resources. *

- * + * *

* For example the Cobertura Sensor parses Cobertura report and saves the first-level of measures on resources. *

- * + * *

* A particular attention should be given to resource exclusion. Sonar already manages exclusions at file level : if you try to save a * measure on a resource that is excluded in the settings, then Sonar will not save the measure. When handling a plugin or an external tool, * you should make sure that exclusions are passed if you are going to get back consolidated data. *

- * + * * @since 1.10 */ public interface Sensor extends BatchExtension, CheckProject { /** * Sensors that depend upon Squid must declare the following method : - * + * *
    * @DependsUpon
    * public String dependsUponSquidAnalysis() {
@@ -57,10 +57,10 @@ public interface Sensor extends BatchExtension, CheckProject {
 
   /**
    * The method that is going to be run when the sensor is called
-   * 
-   * @param project the project the sensor runs on
+   *
+   * @param module the module the sensor runs on
    * @param context the context
    */
-  void analyse(Project project, SensorContext context);
+  void analyse(Project module, SensorContext context);
 
 }
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/FileLinesContextFactory.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/FileLinesContextFactory.java
index e86bbc9fe2f..d9908d4583b 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/FileLinesContextFactory.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/FileLinesContextFactory.java
@@ -22,6 +22,7 @@ package org.sonar.api.measures;
 import com.google.common.annotations.Beta;
 import org.sonar.api.BatchComponent;
 import org.sonar.api.resources.Resource;
+import org.sonar.api.scan.filesystem.InputFile;
 
 /**
  * 

This interface is not intended to be implemented by clients.

@@ -33,4 +34,6 @@ public interface FileLinesContextFactory extends BatchComponent { FileLinesContext createFor(Resource resource); + FileLinesContext createFor(InputFile inputFile); + }