diff options
Diffstat (limited to 'sonar-batch')
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. |