aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2015-02-17 18:47:59 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2015-02-17 18:56:29 +0100
commit27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d (patch)
treec5b4dae3b3f8e9637b704babc98918fa5d41bf6a /sonar-batch
parent40c0a83d32c1d27b3a9cfe64bff9c24597684035 (diff)
downloadsonarqube-27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d.tar.gz
sonarqube-27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d.zip
SONAR-5931 Cleanup dependency API
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/dependency/DefaultDependencyValueCoder.java35
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/dependency/DependencyCache.java24
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/deprecated/DeprecatedSensorContext.java5
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/BatchResource.java4
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java17
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DependencyPersister.java38
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/mediumtest/TaskResult.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorContext.java9
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java12
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/dependency/DependencyMediumTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorContextTest.java3
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java47
13 files changed, 115 insertions, 97 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/dependency/DefaultDependencyValueCoder.java b/sonar-batch/src/main/java/org/sonar/batch/dependency/DefaultDependencyValueCoder.java
index 8f01f2c233b..6dd1202dc42 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/dependency/DefaultDependencyValueCoder.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/dependency/DefaultDependencyValueCoder.java
@@ -22,47 +22,26 @@ package org.sonar.batch.dependency;
import com.persistit.Value;
import com.persistit.encoding.CoderContext;
import com.persistit.encoding.ValueCoder;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.sensor.dependency.internal.DefaultDependency;
-import org.sonar.batch.scan.filesystem.InputPathCache;
class DefaultDependencyValueCoder implements ValueCoder {
- private InputPathCache inputPathCache;
-
- public DefaultDependencyValueCoder(InputPathCache inputPathCache) {
- this.inputPathCache = inputPathCache;
- }
-
@Override
public void put(Value value, Object object, CoderContext context) {
DefaultDependency dep = (DefaultDependency) object;
- value.putUTF(((DefaultInputFile) dep.from()).moduleKey());
- value.putUTF(((DefaultInputFile) dep.from()).relativePath());
- value.putUTF(((DefaultInputFile) dep.to()).moduleKey());
- value.putUTF(((DefaultInputFile) dep.to()).relativePath());
+ value.putUTF(dep.fromKey());
+ value.putUTF(dep.toKey());
value.put(dep.weight());
}
@Override
public Object get(Value value, Class clazz, CoderContext context) {
- String fromModuleKey = value.getString();
- String fromRelativePath = value.getString();
- InputFile from = inputPathCache.getFile(fromModuleKey, fromRelativePath);
- if (from == null) {
- throw new IllegalStateException("Unable to load InputFile " + fromModuleKey + ":" + fromRelativePath);
- }
- String toModuleKey = value.getString();
- String toRelativePath = value.getString();
- InputFile to = inputPathCache.getFile(toModuleKey, toRelativePath);
- if (to == null) {
- throw new IllegalStateException("Unable to load InputFile " + toModuleKey + ":" + toRelativePath);
- }
+ String fromKey = value.getString();
+ String toKey = value.getString();
int weight = value.getInt();
return new DefaultDependency()
- .from(from)
- .to(to)
- .weight(weight);
+ .setFromKey(fromKey)
+ .setToKey(toKey)
+ .setWeight(weight);
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/dependency/DependencyCache.java b/sonar-batch/src/main/java/org/sonar/batch/dependency/DependencyCache.java
index 9e3709a5532..50ce7577c7b 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/dependency/DependencyCache.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/dependency/DependencyCache.java
@@ -21,14 +21,10 @@ package org.sonar.batch.dependency;
import com.google.common.base.Preconditions;
import org.sonar.api.BatchComponent;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.api.batch.sensor.dependency.Dependency;
import org.sonar.api.batch.sensor.dependency.internal.DefaultDependency;
import org.sonar.batch.index.Cache;
import org.sonar.batch.index.Cache.Entry;
import org.sonar.batch.index.Caches;
-import org.sonar.batch.scan.filesystem.InputPathCache;
import javax.annotation.CheckForNull;
@@ -38,29 +34,29 @@ import javax.annotation.CheckForNull;
*/
public class DependencyCache implements BatchComponent {
- private final Cache<Dependency> cache;
+ private final Cache<DefaultDependency> cache;
- public DependencyCache(Caches caches, InputPathCache inputPathCache) {
- caches.registerValueCoder(DefaultDependency.class, new DefaultDependencyValueCoder(inputPathCache));
+ public DependencyCache(Caches caches) {
+ caches.registerValueCoder(DefaultDependency.class, new DefaultDependencyValueCoder());
cache = caches.createCache("dependencies");
}
- public Iterable<Entry<Dependency>> entries() {
+ public Iterable<Entry<DefaultDependency>> entries() {
return cache.entries();
}
@CheckForNull
- public Dependency get(String moduleKey, InputFile from, InputFile to) {
+ public DefaultDependency get(String moduleKey, String fromKey, String toKey) {
Preconditions.checkNotNull(moduleKey);
- Preconditions.checkNotNull(from);
- Preconditions.checkNotNull(to);
- return cache.get(moduleKey, ((DefaultInputFile) from).key(), ((DefaultInputFile) to).key());
+ Preconditions.checkNotNull(fromKey);
+ Preconditions.checkNotNull(toKey);
+ return cache.get(moduleKey, fromKey, toKey);
}
- public DependencyCache put(String moduleKey, Dependency dependency) {
+ public DependencyCache put(String moduleKey, DefaultDependency dependency) {
Preconditions.checkNotNull(moduleKey);
Preconditions.checkNotNull(dependency);
- cache.put(moduleKey, ((DefaultInputFile) dependency.from()).key(), ((DefaultInputFile) dependency.to()).key(), dependency);
+ cache.put(moduleKey, dependency.fromKey(), dependency.toKey(), dependency);
return this;
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/deprecated/DeprecatedSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/deprecated/DeprecatedSensorContext.java
index 6c7146c6e61..a8d96036863 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/deprecated/DeprecatedSensorContext.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/deprecated/DeprecatedSensorContext.java
@@ -40,7 +40,6 @@ import org.sonar.api.measures.Metric;
import org.sonar.api.resources.*;
import org.sonar.api.rules.Violation;
import org.sonar.api.utils.SonarException;
-import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.index.ComponentDataCache;
import org.sonar.batch.sensor.DefaultSensorContext;
import org.sonar.batch.sensor.coverage.CoverageExclusions;
@@ -63,8 +62,8 @@ public class DeprecatedSensorContext extends DefaultSensorContext implements Sen
public DeprecatedSensorContext(SonarIndex index, Project project, Settings settings, FileSystem fs, ActiveRules activeRules,
AnalysisMode analysisMode, ComponentDataCache componentDataCache, CoverageExclusions coverageFilter,
- DuplicationCache duplicationCache, SensorStorage sensorStorage) {
- super(settings, fs, activeRules, analysisMode, componentDataCache, duplicationCache, sensorStorage);
+ SensorStorage sensorStorage) {
+ super(settings, fs, activeRules, analysisMode, componentDataCache, sensorStorage);
this.index = index;
this.project = project;
this.coverageFilter = coverageFilter;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/BatchResource.java b/sonar-batch/src/main/java/org/sonar/batch/index/BatchResource.java
index 10d4b9d543e..a07eded789c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/BatchResource.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/BatchResource.java
@@ -46,6 +46,10 @@ public class BatchResource {
}
}
+ public String key() {
+ return r.getEffectiveKey();
+ }
+
public int batchId() {
return batchId;
}
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 e551d462507..0e2c128b185 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
@@ -114,9 +114,9 @@ public class DefaultIndex extends SonarIndex {
this.measureCache = measureCache;
}
- public DefaultIndex(ResourceCache resourceCache, ProjectTree projectTree, MetricFinder metricFinder, MeasureCache measureCache) {
+ public DefaultIndex(ResourceCache resourceCache, DependencyPersister dependencyPersister, ProjectTree projectTree, MetricFinder metricFinder, MeasureCache measureCache) {
this.resourceCache = resourceCache;
- this.dependencyPersister = null;
+ this.dependencyPersister = dependencyPersister;
this.linkPersister = null;
this.eventPersister = null;
this.projectTree = projectTree;
@@ -188,6 +188,12 @@ public class DefaultIndex extends SonarIndex {
}
}
+ // store dependencies
+ for (Dependency dep : dependencies) {
+ dependencyPersister.saveDependency(currentProject, dep);
+ }
+
+ // Keep only inter module dependencies
Set<Dependency> projectDependencies = getDependenciesBetweenProjects();
dependencies.clear();
incomingDependenciesByResource.clear();
@@ -268,8 +274,10 @@ public class DefaultIndex extends SonarIndex {
// Reload resources
Resource from = getResource(dependency.getFrom());
Preconditions.checkArgument(from != null, dependency.getFrom() + " is not indexed");
+ dependency.setFrom(from);
Resource to = getResource(dependency.getTo());
Preconditions.checkArgument(to != null, dependency.getTo() + " is not indexed");
+ dependency.setTo(to);
Dependency existingDep = getEdge(from, to);
if (existingDep != null) {
@@ -280,10 +288,7 @@ public class DefaultIndex extends SonarIndex {
if (parentDependency != null) {
addDependency(parentDependency);
}
-
- if (registerDependency(dependency) && dependencyPersister != null) {
- dependencyPersister.saveDependency(currentProject, from, to, dependency, parentDependency);
- }
+ registerDependency(dependency);
return dependency;
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DependencyPersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/DependencyPersister.java
index 15886b6b4ac..13c73e278f5 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/DependencyPersister.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/DependencyPersister.java
@@ -19,27 +19,46 @@
*/
package org.sonar.batch.index;
+import org.sonar.api.batch.sensor.dependency.internal.DefaultDependency;
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.design.Dependency;
import org.sonar.api.design.DependencyDto;
import org.sonar.api.resources.Project;
-import org.sonar.api.resources.Resource;
+import org.sonar.batch.dependency.DependencyCache;
+
+import javax.annotation.Nullable;
public final class DependencyPersister {
- private ResourceCache resourceCache;
- private DatabaseSession session;
+ private final ResourceCache resourceCache;
+ private final DatabaseSession session;
+ private final DependencyCache dependencyCache;
- public DependencyPersister(ResourceCache resourceCache, DatabaseSession session) {
+ public DependencyPersister(ResourceCache resourceCache, DependencyCache dependencyCache, @Nullable DatabaseSession session) {
this.resourceCache = resourceCache;
+ this.dependencyCache = dependencyCache;
this.session = session;
}
- public void saveDependency(Project project, Resource from, Resource to, Dependency dependency, Dependency parentDependency) {
- BatchResource fromResource = resourceCache.get(from);
- BatchResource toResource = resourceCache.get(to);
+ public DependencyPersister(ResourceCache resourceCache, DependencyCache dependencyCache) {
+ this(resourceCache, dependencyCache, null);
+ }
+
+ public void saveDependency(Project project, Dependency dependency) {
+ BatchResource fromResource = resourceCache.get(dependency.getFrom());
+ BatchResource toResource = resourceCache.get(dependency.getTo());
BatchResource projectResource = resourceCache.get(project);
+ if (fromResource.isFile() && toResource.isFile()) {
+ dependencyCache.put(project.getEffectiveKey(), new DefaultDependency().setFromKey(fromResource.key()).setToKey(toResource.key()).setWeight(dependency.getWeight()));
+ }
+
+ if (session != null) {
+ saveInDB(project, dependency, fromResource, toResource, projectResource);
+ }
+ }
+
+ private void saveInDB(Project project, Dependency dependency, BatchResource fromResource, BatchResource toResource, BatchResource projectResource) {
DependencyDto model = new DependencyDto();
model.setProjectSnapshotId(projectResource.snapshotId());
model.setUsage(dependency.getUsage());
@@ -53,8 +72,11 @@ public final class DependencyPersister {
model.setToScope(toResource.resource().getScope());
model.setToSnapshotId(toResource.snapshotId());
+ Dependency parentDependency = dependency.getParent();
if (parentDependency != null) {
- // assume that it has been previously saved
+ if (parentDependency.getId() == null) {
+ saveDependency(project, parentDependency);
+ }
model.setParentDependencyId(parentDependency.getId());
}
session.save(model);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/TaskResult.java b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
index 8013dd54d9d..245f85bd38d 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
@@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.InputDir;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.api.batch.sensor.dependency.Dependency;
+import org.sonar.api.batch.sensor.dependency.internal.DefaultDependency;
import org.sonar.api.batch.sensor.duplication.Duplication;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;
@@ -92,7 +92,7 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
storeDuplication(container);
// storeTestCases(container);
// storeCoveragePerTest(container);
- // storeDependencies(container);
+ storeDependencies(container);
}
@@ -174,7 +174,7 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
private void storeDependencies(ProjectScanContainer container) {
DependencyCache dependencyCache = container.getComponentByType(DependencyCache.class);
- for (Entry<Dependency> entry : dependencyCache.entries()) {
+ for (Entry<DefaultDependency> entry : dependencyCache.entries()) {
String fromKey = entry.key()[1].toString();
String toKey = entry.key()[2].toString();
if (!dependencies.containsKey(fromKey)) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
index 850b6e984bf..a2f46a03fe4 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
@@ -41,6 +41,7 @@ import org.sonar.batch.bootstrap.ExtensionUtils;
import org.sonar.batch.bootstrap.MetricProvider;
import org.sonar.batch.debt.DebtModelProvider;
import org.sonar.batch.debt.IssueChangelogDebtCalculator;
+import org.sonar.batch.dependency.DependencyCache;
import org.sonar.batch.deprecated.components.DefaultResourceCreationLock;
import org.sonar.batch.deprecated.components.PeriodsDefinition;
import org.sonar.batch.duplication.DuplicationCache;
@@ -189,6 +190,10 @@ public class ProjectScanContainer extends ComponentContainer {
// Duplications
DuplicationCache.class,
+ // Dependencies
+ DependencyPersister.class,
+ DependencyCache.class,
+
ProjectSettings.class,
ScanTaskObservers.class);
@@ -196,7 +201,6 @@ public class ProjectScanContainer extends ComponentContainer {
private void addDataBaseComponents() {
add(
- DependencyPersister.class,
EventPersister.class,
LinkPersister.class,
MeasurePersister.class,
diff --git a/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorContext.java
index 654134b0519..7dd0c1eab1c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorContext.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorContext.java
@@ -26,7 +26,7 @@ import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorStorage;
-import org.sonar.api.batch.sensor.dependency.Dependency;
+import org.sonar.api.batch.sensor.dependency.NewDependency;
import org.sonar.api.batch.sensor.dependency.internal.DefaultDependency;
import org.sonar.api.batch.sensor.duplication.NewDuplication;
import org.sonar.api.batch.sensor.duplication.internal.DefaultDuplication;
@@ -43,7 +43,6 @@ import org.sonar.api.batch.sensor.test.internal.DefaultCoverage;
import org.sonar.api.batch.sensor.test.internal.DefaultTestCaseCoverage;
import org.sonar.api.batch.sensor.test.internal.DefaultTestCaseExecution;
import org.sonar.api.config.Settings;
-import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.highlighting.DefaultHighlightingBuilder;
import org.sonar.batch.index.ComponentDataCache;
import org.sonar.batch.symbol.DefaultSymbolTableBuilder;
@@ -56,18 +55,16 @@ public class DefaultSensorContext implements SensorContext {
private final FileSystem fs;
private final ActiveRules activeRules;
private final ComponentDataCache componentDataCache;
- private final DuplicationCache duplicationCache;
private final SensorStorage sensorStorage;
private final AnalysisMode analysisMode;
public DefaultSensorContext(Settings settings, FileSystem fs, ActiveRules activeRules, AnalysisMode analysisMode, ComponentDataCache componentDataCache,
- DuplicationCache duplicationCache, SensorStorage sensorStorage) {
+ SensorStorage sensorStorage) {
this.settings = settings;
this.fs = fs;
this.activeRules = activeRules;
this.analysisMode = analysisMode;
this.componentDataCache = componentDataCache;
- this.duplicationCache = duplicationCache;
this.sensorStorage = sensorStorage;
}
@@ -132,7 +129,7 @@ public class DefaultSensorContext implements SensorContext {
}
@Override
- public Dependency newDependency() {
+ public NewDependency newDependency() {
return new DefaultDependency(sensorStorage);
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java b/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
index 300fe651380..d512c02ca96 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
@@ -58,6 +58,7 @@ import org.sonar.api.test.Testable;
import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.index.ComponentDataCache;
import org.sonar.batch.index.DefaultIndex;
+import org.sonar.batch.index.ResourceCache;
import org.sonar.batch.sensor.coverage.CoverageExclusions;
import org.sonar.core.component.ComponentKeys;
@@ -70,17 +71,20 @@ public class DefaultSensorStorage implements SensorStorage {
private final DefaultIndex sonarIndex;
private final CoverageExclusions coverageExclusions;
private final DuplicationCache duplicationCache;
+ private final ResourceCache resourceCache;
public DefaultSensorStorage(MetricFinder metricFinder, Project project,
ResourcePerspectives perspectives,
Settings settings, FileSystem fs, ActiveRules activeRules, ComponentDataCache componentDataCache,
- DuplicationCache duplicationCache, DefaultIndex sonarIndex, CoverageExclusions coverageExclusions) {
+ DuplicationCache duplicationCache, DefaultIndex sonarIndex, CoverageExclusions coverageExclusions,
+ ResourceCache resourceCache) {
this.metricFinder = metricFinder;
this.project = project;
this.perspectives = perspectives;
this.sonarIndex = sonarIndex;
this.coverageExclusions = coverageExclusions;
this.duplicationCache = duplicationCache;
+ this.resourceCache = resourceCache;
}
private Metric findMetricOrFail(String metricKey) {
@@ -241,10 +245,10 @@ public class DefaultSensorStorage implements SensorStorage {
@Override
public void store(org.sonar.api.batch.sensor.dependency.Dependency dep) {
- File fromResource = getFile(dep.from());
- File toResource = getFile(dep.to());
+ File fromResource = (File) resourceCache.get(dep.fromKey()).resource();
+ File toResource = (File) resourceCache.get(dep.toKey()).resource();
if (sonarIndex.getEdge(fromResource, toResource) != null) {
- throw new IllegalStateException("Dependency between " + dep.from() + " and " + dep.to() + " was already saved.");
+ throw new IllegalStateException("Dependency between " + dep.fromKey() + " and " + dep.toKey() + " was already saved.");
}
Directory fromParent = fromResource.getParent();
Directory toParent = toResource.getParent();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/dependency/DependencyMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/dependency/DependencyMediumTest.java
index 4d562d4de87..e7a08a4a37c 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/dependency/DependencyMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/dependency/DependencyMediumTest.java
@@ -34,6 +34,8 @@ import org.sonar.xoo.XooPlugin;
import java.io.File;
import java.io.IOException;
+import static org.assertj.core.api.Assertions.assertThat;
+
public class DependencyMediumTest {
@Rule
@@ -85,8 +87,8 @@ public class DependencyMediumTest {
.build())
.start();
- // assertThat(result.dependencyWeight(result.inputFile("src/sample.xoo"), result.inputFile("src/sample2.xoo"))).isEqualTo(3);
- // assertThat(result.dependencyWeight(result.inputFile("src/sample.xoo"), result.inputFile("src/foo/sample3.xoo"))).isEqualTo(6);
+ assertThat(result.dependencyWeight(result.inputFile("src/sample.xoo"), result.inputFile("src/sample2.xoo"))).isEqualTo(3);
+ assertThat(result.dependencyWeight(result.inputFile("src/sample.xoo"), result.inputFile("src/foo/sample3.xoo"))).isEqualTo(6);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorContextTest.java b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorContextTest.java
index 4f7fa7507ac..19b12f7b972 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorContextTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorContextTest.java
@@ -32,7 +32,6 @@ import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.batch.sensor.SensorStorage;
import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
-import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.index.ComponentDataCache;
import static org.assertj.core.api.Assertions.assertThat;
@@ -65,7 +64,7 @@ public class DefaultSensorContextTest {
ComponentDataCache componentDataCache = mock(ComponentDataCache.class);
sensorStorage = mock(SensorStorage.class);
analysisMode = mock(AnalysisMode.class);
- adaptor = new DefaultSensorContext(settings, fs, activeRules, analysisMode, componentDataCache, mock(DuplicationCache.class), sensorStorage);
+ adaptor = new DefaultSensorContext(settings, fs, activeRules, analysisMode, componentDataCache, sensorStorage);
}
@Test
diff --git a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
index a4ed0b08571..02b526f0375 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
@@ -54,6 +54,7 @@ import org.sonar.api.rule.RuleKey;
import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.index.ComponentDataCache;
import org.sonar.batch.index.DefaultIndex;
+import org.sonar.batch.index.ResourceCache;
import org.sonar.batch.sensor.coverage.CoverageExclusions;
import static org.assertj.core.api.Assertions.assertThat;
@@ -80,6 +81,8 @@ public class DefaultSensorStorageTest {
private Project project;
private DefaultIndex sonarIndex;
+ private ResourceCache resourceCache;
+
@Before
public void prepare() throws Exception {
activeRules = new ActiveRulesBuilder().build();
@@ -94,8 +97,9 @@ public class DefaultSensorStorageTest {
sonarIndex = mock(DefaultIndex.class);
CoverageExclusions coverageExclusions = mock(CoverageExclusions.class);
when(coverageExclusions.accept(any(Resource.class), any(Measure.class))).thenReturn(true);
+ resourceCache = new ResourceCache();
sensorStorage = new DefaultSensorStorage(metricFinder, project,
- resourcePerspectives, settings, fs, activeRules, componentDataCache, mock(DuplicationCache.class), sonarIndex, coverageExclusions);
+ resourcePerspectives, settings, fs, activeRules, componentDataCache, mock(DuplicationCache.class), sonarIndex, coverageExclusions, resourceCache);
}
@Test
@@ -248,10 +252,10 @@ public class DefaultSensorStorageTest {
@Test
public void shouldStoreDependencyInSameFolder() {
- File foo = File.create("src/Foo.java");
- File bar = File.create("src/Bar.java");
- when(sonarIndex.getResource(foo)).thenReturn(foo);
- when(sonarIndex.getResource(bar)).thenReturn(bar);
+ Resource foo = File.create("src/Foo.java").setEffectiveKey("foo:src/Foo.java");
+ Resource bar = File.create("src/Bar.java").setEffectiveKey("foo:src/Bar.java");
+ resourceCache.add(foo, null);
+ resourceCache.add(bar, null);
sensorStorage.store(new DefaultDependency()
.from(new DefaultInputFile("foo", "src/Foo.java").setType(Type.MAIN))
@@ -270,14 +274,15 @@ public class DefaultSensorStorageTest {
@Test
public void throw_if_attempt_to_save_same_dep_twice() {
- File foo = File.create("src/Foo.java");
- File bar = File.create("src/Bar.java");
- when(sonarIndex.getResource(foo)).thenReturn(foo);
- when(sonarIndex.getResource(bar)).thenReturn(bar);
+ Resource foo = File.create("src/Foo.java").setEffectiveKey("foo:src/Foo.java");
+ Resource bar = File.create("src/Bar.java").setEffectiveKey("foo:src/Bar.java");
+ resourceCache.add(foo, null);
+ resourceCache.add(bar, null);
+
when(sonarIndex.getEdge(foo, bar)).thenReturn(new Dependency(foo, bar));
thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Dependency between [moduleKey=foo, relative=src/Foo.java, basedir=null] and [moduleKey=foo, relative=src/Bar.java, basedir=null] was already saved.");
+ thrown.expectMessage("Dependency between foo:src/Foo.java and foo:src/Bar.java was already saved.");
sensorStorage.store(new DefaultDependency()
.from(new DefaultInputFile("foo", "src/Foo.java").setType(Type.MAIN))
@@ -288,10 +293,10 @@ public class DefaultSensorStorageTest {
@Test
public void shouldStoreDependencyInDifferentFolder() {
- File foo = File.create("src1/Foo.java");
- File bar = File.create("src2/Bar.java");
- when(sonarIndex.getResource(foo)).thenReturn(foo);
- when(sonarIndex.getResource(bar)).thenReturn(bar);
+ Resource foo = File.create("src1/Foo.java").setEffectiveKey("foo:src1/Foo.java");
+ Resource bar = File.create("src2/Bar.java").setEffectiveKey("foo:src2/Bar.java");
+ resourceCache.add(foo, null);
+ resourceCache.add(bar, null);
sensorStorage.store(new DefaultDependency()
.from(new DefaultInputFile("foo", "src1/Foo.java").setType(Type.MAIN))
@@ -318,12 +323,14 @@ public class DefaultSensorStorageTest {
@Test
public void shouldIncrementParentWeight() {
- File foo = File.create("src1/Foo.java");
- File bar = File.create("src2/Bar.java");
- Directory src1 = Directory.create("src1");
- Directory src2 = Directory.create("src2");
- when(sonarIndex.getResource(foo)).thenReturn(foo);
- when(sonarIndex.getResource(bar)).thenReturn(bar);
+ Resource src1 = Directory.create("src1").setEffectiveKey("foo:src1");
+ Resource src2 = Directory.create("src2").setEffectiveKey("foo:src2");
+ Resource foo = File.create("src1/Foo.java").setEffectiveKey("foo:src1/Foo.java");
+ Resource bar = File.create("src2/Bar.java").setEffectiveKey("foo:src2/Bar.java");
+ resourceCache.add(src1, null);
+ resourceCache.add(src2, null);
+ resourceCache.add(foo, src1);
+ resourceCache.add(bar, src2);
Dependency parentDep = new Dependency(src1, src2).setWeight(4);
when(sonarIndex.getEdge(src1, src2)).thenReturn(parentDep);