diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2015-02-17 18:47:59 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2015-02-17 18:56:29 +0100 |
commit | 27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d (patch) | |
tree | c5b4dae3b3f8e9637b704babc98918fa5d41bf6a /sonar-batch | |
parent | 40c0a83d32c1d27b3a9cfe64bff9c24597684035 (diff) | |
download | sonarqube-27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d.tar.gz sonarqube-27962d4b5f724cf0b3016ffef2e43fefeb1c2d0d.zip |
SONAR-5931 Cleanup dependency API
Diffstat (limited to 'sonar-batch')
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); |