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