aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java44
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java5
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java19
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/ResourcePersister.java9
4 files changed, 71 insertions, 6 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java
index d52e6e7d2c2..2d0a1283672 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java
@@ -29,11 +29,16 @@ import org.sonar.api.design.Dependency;
import org.sonar.api.measures.Measure;
import org.sonar.api.measures.MeasuresFilter;
import org.sonar.api.measures.Metric;
+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.Project;
import org.sonar.api.resources.ProjectLink;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.Scopes;
import org.sonar.api.rules.Violation;
+import org.sonar.api.scan.filesystem.internal.InputFile;
import org.sonar.api.utils.SonarException;
import org.sonar.core.measure.MeasurementFilters;
@@ -49,11 +54,13 @@ public class DefaultSensorContext implements SensorContext {
private SonarIndex index;
private Project project;
private MeasurementFilters filters;
+ private Languages languages;
- public DefaultSensorContext(SonarIndex index, Project project, MeasurementFilters filters) {
+ public DefaultSensorContext(SonarIndex index, Project project, MeasurementFilters filters, Languages languages) {
this.index = index;
this.project = project;
this.filters = filters;
+ this.languages = languages;
}
public Project getProject() {
@@ -74,6 +81,7 @@ public class DefaultSensorContext implements SensorContext {
StringUtils.equals(Scopes.FILE, resource.getScope());
}
+ @Override
public boolean index(Resource resource, Resource parentReference) {
// SONAR-5006
if (indexedByCore(resource)) {
@@ -88,42 +96,52 @@ public class DefaultSensorContext implements SensorContext {
"Plugin should not index physical resources"));
}
+ @Override
public boolean isExcluded(Resource reference) {
return index.isExcluded(reference);
}
+ @Override
public boolean isIndexed(Resource reference, boolean acceptExcluded) {
return index.isIndexed(reference, acceptExcluded);
}
+ @Override
public Resource getParent(Resource reference) {
return index.getParent(reference);
}
+ @Override
public Collection<Resource> getChildren(Resource reference) {
return index.getChildren(reference);
}
+ @Override
public Measure getMeasure(Metric metric) {
return index.getMeasure(project, metric);
}
+ @Override
public <M> M getMeasures(MeasuresFilter<M> filter) {
return index.getMeasures(project, filter);
}
+ @Override
public Measure saveMeasure(Measure measure) {
return index.addMeasure(project, measure);
}
+ @Override
public Measure saveMeasure(Metric metric, Double value) {
return index.addMeasure(project, new Measure(metric, value));
}
+ @Override
public Measure getMeasure(Resource resource, Metric metric) {
return index.getMeasure(resource, metric);
}
+ @Override
public String saveResource(Resource resource) {
Resource persistedResource = index.addResource(resource);
if (persistedResource != null) {
@@ -136,18 +154,22 @@ public class DefaultSensorContext implements SensorContext {
return index.index(resource, parentReference);
}
+ @Override
public Resource getResource(Resource resource) {
return index.getResource(resource);
}
+ @Override
public <M> M getMeasures(Resource resource, MeasuresFilter<M> filter) {
return index.getMeasures(resource, filter);
}
+ @Override
public Measure saveMeasure(Resource resource, Metric metric, Double value) {
return saveMeasure(resource, new Measure(metric, value));
}
+ @Override
public Measure saveMeasure(Resource resource, Measure measure) {
if (filters.accept(resource, measure)) {
return index.addMeasure(resourceOrProject(resource), measure);
@@ -217,4 +239,24 @@ public class DefaultSensorContext implements SensorContext {
private Resource resourceOrProject(Resource resource) {
return resource != null ? resource : project;
}
+
+ @Override
+ public Measure saveMeasure(InputFile inputFile, Metric metric, Double value) {
+ return saveMeasure(fromInputFile(inputFile), metric, value);
+ }
+
+ @Override
+ public Measure saveMeasure(InputFile inputFile, Measure measure) {
+ return saveMeasure(fromInputFile(inputFile), measure);
+ }
+
+ private Resource fromInputFile(InputFile inputFile) {
+ String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE);
+ boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE));
+ if (Java.KEY.equals(languageKey)) {
+ return JavaFile.create(inputFile.path(), inputFile.attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest);
+ } else {
+ return File.create(inputFile.path(), inputFile.attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), languages.get(languageKey), unitTest);
+ }
+ }
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
index fa665e608b9..c76b2498ae1 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
@@ -535,6 +535,11 @@ public class DefaultIndex extends SonarIndex {
return bucket;
}
+ if (StringUtils.isBlank(resource.getKey())) {
+ LOG.warn("Unable to index a resource without key " + resource);
+ return null;
+ }
+
checkLock(resource);
Resource parent = null;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
index cbf24c5e6be..26799593177 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
@@ -25,12 +25,16 @@ import org.apache.commons.lang.StringUtils;
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.model.ResourceModel;
import org.sonar.api.database.model.Snapshot;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.Java;
+import org.sonar.api.resources.JavaFile;
import org.sonar.api.resources.Library;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.ResourceUtils;
import org.sonar.api.resources.Scopes;
+import org.sonar.api.scan.filesystem.internal.InputFile;
import org.sonar.api.security.ResourcePermissions;
import org.sonar.api.utils.SonarException;
@@ -131,6 +135,21 @@ public final class DefaultResourcePersister implements ResourcePersister {
return snapshot;
}
+ @Override
+ public Snapshot getSnapshotOrFail(InputFile inputFile) {
+ return getSnapshotOrFail(fromInputFile(inputFile));
+ };
+
+ private Resource fromInputFile(InputFile inputFile) {
+ String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE);
+ boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE));
+ if (Java.KEY.equals(languageKey)) {
+ return JavaFile.create(inputFile.path(), inputFile.attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest);
+ } else {
+ return File.create(inputFile.path(), inputFile.attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), null, unitTest);
+ }
+ }
+
/**
* just for unit tests
*/
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 4310f54c165..8e41528ba36 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
@@ -22,9 +22,10 @@ package org.sonar.batch.index;
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.internal.InputFile;
public interface ResourcePersister {
-
+
Snapshot saveProject(Project project, Project parent);
/**
@@ -39,11 +40,9 @@ public interface ResourcePersister {
Snapshot getSnapshot(Resource resource);
- /**
- * @throws ResourceNotPersistedException if the resource is not persisted.
- */
Snapshot getSnapshotOrFail(Resource resource);
-
+
+ Snapshot getSnapshotOrFail(InputFile resource);
/**
* The current snapshot which is flagged as "last", different then the current analysis.