aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-04-11 16:24:52 +0200
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-04-11 16:24:52 +0200
commitfa79db824d284f92ff2cb65c9dc7d3029f3a36fa (patch)
tree82bd938d692d0b81b80eec754fdd0bb1e53df237
parent619d71c598da3903dd8c7516a0ca170689a18fc9 (diff)
downloadsonarqube-fa79db824d284f92ff2cb65c9dc7d3029f3a36fa.tar.gz
sonarqube-fa79db824d284f92ff2cb65c9dc7d3029f3a36fa.zip
(SONAR-3893) Improve the highlighter API to not depend on sonar-channel and allow to work on multi-line tokens - Added highlighting caching and persistence
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/DefaultHighlightable.java (renamed from sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java)32
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/HighlightableBuilder.java (renamed from sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java)9
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingCache.java (renamed from sonar-batch/src/main/java/org/sonar/batch/source/SyntaxPersister.java)25
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingPersister.java24
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRule.java (renamed from sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRule.java)2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSet.java (renamed from sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRuleSet.java)2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/source/DefaultHighlightableTest.java (renamed from sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java)34
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/source/HighlightableBuilderTest.java (renamed from sonar-core/src/test/java/org/sonar/core/source/HighlightableBuilderTest.java)5
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingPersisterTest.java89
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSetTest.java (renamed from sonar-core/src/test/java/org/sonar/core/source/SyntaxHighlightingRuleSetTest.java)2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/source/SyntaxPersisterTest.java37
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java4
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java26
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/scan/source/Highlightable.java13
17 files changed, 248 insertions, 72 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
index 004b22f11cd..855e40be342 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
@@ -57,11 +57,7 @@ import org.sonar.batch.scan.filesystem.LanguageFilters;
import org.sonar.batch.scan.filesystem.ModuleFileSystemProvider;
import org.sonar.core.component.ScanPerspectives;
import org.sonar.batch.issue.ScanIssuableFactory;
-import org.sonar.core.source.HighlightableBuilder;
-import org.sonar.core.test.TestPlanBuilder;
-import org.sonar.core.test.TestPlanPerspectiveLoader;
-import org.sonar.core.test.TestableBuilder;
-import org.sonar.core.test.TestablePerspectiveLoader;
+import org.sonar.batch.scan.source.HighlightableBuilder;
public class ModuleScanContainer extends ComponentContainer {
private static final Logger LOG = LoggerFactory.getLogger(ModuleScanContainer.class);
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 6a713c09fe3..d26352c878f 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
@@ -38,6 +38,8 @@ import org.sonar.batch.issue.IssuePersister;
import org.sonar.batch.phases.GraphPersister;
import org.sonar.batch.scan.maven.FakeMavenPluginExecutor;
import org.sonar.batch.scan.maven.MavenPluginExecutor;
+import org.sonar.batch.scan.source.SyntaxHighlightingCache;
+import org.sonar.batch.scan.source.SyntaxHighlightingPersister;
import org.sonar.core.component.ScanGraph;
import org.sonar.core.notification.DefaultNotificationManager;
import org.sonar.core.test.TestPlanBuilder;
@@ -86,7 +88,11 @@ public class ProjectScanContainer extends ComponentContainer {
TestPlanBuilder.class,
TestableBuilder.class,
ScanGraph.create(),
- GraphPersister.class);
+ GraphPersister.class,
+
+ SyntaxHighlightingCache.class,
+ SyntaxHighlightingPersister.class
+ );
}
private void fixMavenExecutor() {
diff --git a/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/DefaultHighlightable.java
index 83e3dbf8453..3327bdea837 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/DefaultHighlightable.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import org.sonar.api.component.Component;
import org.sonar.api.scan.source.Highlightable;
@@ -27,10 +27,19 @@ import org.sonar.api.scan.source.Highlightable;
*/
public class DefaultHighlightable implements Highlightable {
+ private final Component component;
+ private final SyntaxHighlightingCache syntaxHighlightingCache;
private final SyntaxHighlightingRuleSet.Builder highlightingRulesBuilder;
- public DefaultHighlightable() {
- highlightingRulesBuilder = SyntaxHighlightingRuleSet.builder();
+ public DefaultHighlightable(Component component, SyntaxHighlightingCache syntaxHighlightingCache) {
+ this.component = component;
+ this.syntaxHighlightingCache = syntaxHighlightingCache;
+ this.highlightingRulesBuilder = SyntaxHighlightingRuleSet.builder();
+ }
+
+ @Override
+ public SyntaxHighlighter createHighlighter() {
+ return new DefaultSyntaxHighlighter();
}
@Override
@@ -40,10 +49,25 @@ public class DefaultHighlightable implements Highlightable {
@Override
public Component component() {
- throw new UnsupportedOperationException("Unexpected call to component API");
+ return component;
}
public SyntaxHighlightingRuleSet getHighlightingRules() {
return highlightingRulesBuilder.build();
}
+
+ private class DefaultSyntaxHighlighter implements SyntaxHighlighter {
+
+ @Override
+ public SyntaxHighlighter highlightText(int startOffset, int endOffset, String typeOfText) {
+ highlightingRulesBuilder.registerHighlightingRule(startOffset, endOffset, typeOfText);
+ return this;
+ }
+
+ @Override
+ public void applyHighlighting() {
+ String serializedHighlightingRules = highlightingRulesBuilder.build().serializeAsString();
+ syntaxHighlightingCache.registerSourceHighlighting(component().key(), serializedHighlightingRules);
+ }
+ }
}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/HighlightableBuilder.java
index 542468d0263..a25c39d114f 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/HighlightableBuilder.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import org.sonar.api.component.Component;
import org.sonar.api.scan.source.Highlightable;
@@ -28,12 +28,15 @@ import org.sonar.core.component.PerspectiveBuilder;
*/
public class HighlightableBuilder extends PerspectiveBuilder<Highlightable> {
- public HighlightableBuilder() {
+ private final SyntaxHighlightingCache syntaxHighlightingCache;
+
+ public HighlightableBuilder(SyntaxHighlightingCache syntaxHighlightingCache) {
super(Highlightable.class);
+ this.syntaxHighlightingCache = syntaxHighlightingCache;
}
@Override
protected Highlightable loadPerspective(Class<Highlightable> perspectiveClass, Component component) {
- return new DefaultHighlightable();
+ return new DefaultHighlightable(component, syntaxHighlightingCache);
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/source/SyntaxPersister.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingCache.java
index 8eeb3cb1618..d2e90f20b91 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/source/SyntaxPersister.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingCache.java
@@ -17,20 +17,27 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.batch.source;
-import org.sonar.batch.index.ScanPersister;
-import org.sonar.batch.index.SnapshotCache;
+package org.sonar.batch.scan.source;
-public class SyntaxPersister implements ScanPersister {
- private final SnapshotCache snapshots;
+import com.google.common.collect.Maps;
+import org.sonar.api.BatchComponent;
- public SyntaxPersister(SnapshotCache snapshots) {
- this.snapshots = snapshots;
+import java.util.Map;
+
+public class SyntaxHighlightingCache implements BatchComponent {
+
+ private final Map<String, String> highlightingCache;
+
+ public SyntaxHighlightingCache() {
+ highlightingCache = Maps.newHashMap();
}
- @Override
- public void persist() {
+ public void registerSourceHighlighting(String componentKey, String serializedHighlightingRules) {
+ highlightingCache.put(componentKey, serializedHighlightingRules);
+ }
+ public Map<String, String> getHighlightingRulesByComponent() {
+ return highlightingCache;
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingPersister.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingPersister.java
index 5275877d581..fd3d016e339 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingPersister.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingPersister.java
@@ -20,22 +20,44 @@
package org.sonar.batch.scan.source;
+import org.sonar.api.database.model.Snapshot;
import org.sonar.batch.index.ScanPersister;
+import org.sonar.batch.index.SnapshotCache;
import org.sonar.core.source.jdbc.SnapshotDataDao;
+import org.sonar.core.source.jdbc.SnapshotDataDto;
+
+import java.util.Map;
public class SyntaxHighlightingPersister implements ScanPersister {
+ public static final String DATA_TYPE = "highlight_syntax";
+
private final SnapshotDataDao snapshotDataDao;
+ private final SyntaxHighlightingCache highlightingCache;
+ private final SnapshotCache snapshots;
- public SyntaxHighlightingPersister(SnapshotDataDao snapshotDataDao) {
+ public SyntaxHighlightingPersister(SnapshotDataDao snapshotDataDao, SyntaxHighlightingCache highlightingCache, SnapshotCache snapshots) {
this.snapshotDataDao = snapshotDataDao;
+ this.highlightingCache = highlightingCache;
+ this.snapshots = snapshots;
}
@Override
public void persist() {
+ Map<String, String> highlightingRules = highlightingCache.getHighlightingRulesByComponent();
+
+ for (String component : highlightingRules.keySet()) {
+ Snapshot snapshotForComponent = snapshots.get(component);
+ SnapshotDataDto snapshotDataDto = new SnapshotDataDto();
+ snapshotDataDto.setSnapshotId(snapshotForComponent.getId());
+ snapshotDataDto.setResourceId(snapshotForComponent.getResourceId());
+ snapshotDataDto.setDataType(DATA_TYPE);
+ snapshotDataDto.setData(highlightingRules.get(component));
+ snapshotDataDao.insert(snapshotDataDto);
+ }
}
}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRule.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRule.java
index 462b1e445de..90ab73485d9 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRule.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRule.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
/**
* @since 3.6
diff --git a/sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRuleSet.java b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSet.java
index b83c1b1b711..6de5677588d 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/SyntaxHighlightingRuleSet.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSet.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Predicate;
diff --git a/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/source/DefaultHighlightableTest.java
index 50b9795aa66..c3c18da4962 100644
--- a/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/source/DefaultHighlightableTest.java
@@ -17,13 +17,17 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.sonar.api.component.Component;
import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public class DefaultHighlightableTest {
@@ -33,18 +37,36 @@ public class DefaultHighlightableTest {
@Test
public void should_register_highlighting_rule() throws Exception {
- DefaultHighlightable highlightable = new DefaultHighlightable();
+ DefaultHighlightable highlightable = new DefaultHighlightable(null, null);
highlightable.highlightText(1, 10, "k");
assertThat(highlightable.getHighlightingRules().getSyntaxHighlightingRuleSet()).hasSize(1);
}
+
+ @Test
+ public void should_store_highlighting_rules() throws Exception {
+
+ DefaultHighlightable highlightablePerspective = new DefaultHighlightable(null, null);
+ highlightablePerspective.createHighlighter().highlightText(0, 10, "k").highlightText(20, 30, "cppd");
+
+ assertThat(highlightablePerspective.getHighlightingRules().getSyntaxHighlightingRuleSet()).hasSize(2);
+ }
+
@Test
- public void should_reject_any_call_to_component() throws Exception {
+ public void should_apply_registered_highlighting() throws Exception {
+
+ Component component = mock(Component.class);
+ when(component.key()).thenReturn("myComponent");
+
+ SyntaxHighlightingCache highlightingCache = mock(SyntaxHighlightingCache.class);
- throwable.expect(UnsupportedOperationException.class);
+ DefaultHighlightable highlightablePerspective = new DefaultHighlightable(component, highlightingCache);
+ highlightablePerspective.createHighlighter()
+ .highlightText(0, 10, "k")
+ .highlightText(20, 30, "cppd")
+ .applyHighlighting();
- DefaultHighlightable highlightable = new DefaultHighlightable();
- highlightable.component();
+ verify(highlightingCache).registerSourceHighlighting("myComponent", "0,10,k;20,30,cppd;");
}
}
diff --git a/sonar-core/src/test/java/org/sonar/core/source/HighlightableBuilderTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/source/HighlightableBuilderTest.java
index 427feb7ce9e..95fccc235dc 100644
--- a/sonar-core/src/test/java/org/sonar/core/source/HighlightableBuilderTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/source/HighlightableBuilderTest.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import org.junit.Test;
import org.sonar.api.component.Component;
@@ -32,8 +32,9 @@ public class HighlightableBuilderTest {
public void should_load_default_perspective() throws Exception {
Component mockComponent = mock(Component.class);
+ SyntaxHighlightingCache highlightingCache = mock(SyntaxHighlightingCache.class);
- HighlightableBuilder builder = new HighlightableBuilder();
+ HighlightableBuilder builder = new HighlightableBuilder(highlightingCache);
Highlightable perspective = builder.loadPerspective(Highlightable.class, mockComponent);
assertThat(perspective).isInstanceOf(DefaultHighlightable.class);
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingPersisterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingPersisterTest.java
new file mode 100644
index 00000000000..fb8816aef6f
--- /dev/null
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingPersisterTest.java
@@ -0,0 +1,89 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+
+package org.sonar.batch.scan.source;
+
+import com.google.common.collect.Maps;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentMatcher;
+import org.mockito.InOrder;
+import org.sonar.api.database.model.Snapshot;
+import org.sonar.batch.index.SnapshotCache;
+import org.sonar.core.source.jdbc.SnapshotDataDao;
+import org.sonar.core.source.jdbc.SnapshotDataDto;
+
+import java.util.Map;
+
+import static org.mockito.Mockito.*;
+
+public class SyntaxHighlightingPersisterTest {
+
+ private SnapshotCache snapshots;
+ private SyntaxHighlightingCache highlightingCache;
+ private SnapshotDataDao snapshotDataDao;
+
+ @Before
+ public void setUpInjectedObjects() {
+ snapshots = mock(SnapshotCache.class);
+ highlightingCache = mock(SyntaxHighlightingCache.class);
+ snapshotDataDao = mock(SnapshotDataDao.class);
+ }
+
+ @Test
+ public void should_persist_components_highlighting() throws Exception {
+
+ Snapshot snapshotComponent1 = mock(Snapshot.class);
+ when(snapshotComponent1.getId()).thenReturn(1);
+ when(snapshotComponent1.getResourceId()).thenReturn(1);
+
+ Snapshot snapshotComponent2 = mock(Snapshot.class);
+ when(snapshotComponent2.getId()).thenReturn(2);
+ when(snapshotComponent2.getResourceId()).thenReturn(2);
+
+ Map<String, String> highlightingRules = Maps.newHashMap();
+ highlightingRules.put("component1", "0,10,k;2,4,k;15,25,cppd;");
+ highlightingRules.put("component2", "0,5,cppd;15,25,k;");
+
+ when(highlightingCache.getHighlightingRulesByComponent()).thenReturn(highlightingRules);
+
+ when(snapshots.get("component1")).thenReturn(snapshotComponent1);
+ when(snapshots.get("component2")).thenReturn(snapshotComponent2);
+
+ SyntaxHighlightingPersister persister = new SyntaxHighlightingPersister(snapshotDataDao, highlightingCache, snapshots);
+ persister.persist();
+
+ InOrder orderedMock = inOrder(snapshotDataDao);
+
+ orderedMock.verify(snapshotDataDao).insert(argThat(new ArgumentMatcher<SnapshotDataDto>() {
+ @Override
+ public boolean matches(Object o) {
+ return ((SnapshotDataDto)o).getSnapshotId() == 1;
+ }
+ }));
+
+ orderedMock.verify(snapshotDataDao).insert(argThat(new ArgumentMatcher<SnapshotDataDto>() {
+ @Override
+ public boolean matches(Object o) {
+ return ((SnapshotDataDto)o).getSnapshotId() == 2;
+ }
+ }));
+ }
+}
diff --git a/sonar-core/src/test/java/org/sonar/core/source/SyntaxHighlightingRuleSetTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSetTest.java
index cbcb717411d..e6cddd2db4c 100644
--- a/sonar-core/src/test/java/org/sonar/core/source/SyntaxHighlightingRuleSetTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/source/SyntaxHighlightingRuleSetTest.java
@@ -17,7 +17,7 @@
* License along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
-package org.sonar.core.source;
+package org.sonar.batch.scan.source;
import org.junit.Before;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/source/SyntaxPersisterTest.java b/sonar-batch/src/test/java/org/sonar/batch/source/SyntaxPersisterTest.java
deleted file mode 100644
index 2a333505336..00000000000
--- a/sonar-batch/src/test/java/org/sonar/batch/source/SyntaxPersisterTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2012 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
- */
-package org.sonar.batch.source;
-
-import org.junit.Test;
-import org.sonar.batch.index.SnapshotCache;
-
-import static org.mockito.Mockito.mock;
-
-public class SyntaxPersisterTest {
-
- SnapshotCache snapshots = mock(SnapshotCache.class);
-
- @Test
- public void should_persist() throws Exception {
- SyntaxPersister persister = new SyntaxPersister(snapshots);
- persister.persist();
- // TODO
- }
-}
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
index 3aa799ddae0..8cc38c58d83 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
@@ -34,6 +34,7 @@ import org.sonar.core.resource.ResourceKeyUpdaterDao;
import org.sonar.core.review.ReviewCommentDao;
import org.sonar.core.review.ReviewDao;
import org.sonar.core.rule.RuleDao;
+import org.sonar.core.source.jdbc.SnapshotDataDao;
import org.sonar.core.template.LoadedTemplateDao;
import org.sonar.core.user.AuthorDao;
import org.sonar.core.user.UserDao;
@@ -65,6 +66,7 @@ public final class DaoUtils {
ReviewDao.class,
RuleDao.class,
SemaphoreDao.class,
+ SnapshotDataDao.class,
UserDao.class
);
}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
index de8512aedbd..45c2649758b 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
@@ -21,12 +21,14 @@
package org.sonar.core.source.jdbc;
import org.apache.ibatis.session.SqlSession;
+import org.sonar.api.BatchComponent;
+import org.sonar.api.ServerComponent;
import org.sonar.core.persistence.MyBatis;
/**
* @since 3.6
*/
-public class SnapshotDataDao {
+public class SnapshotDataDao implements BatchComponent, ServerComponent {
private final MyBatis mybatis;
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
index 847ac49e1b5..7a8669eed10 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
@@ -70,4 +70,30 @@ public class SnapshotDataDto {
public void setDataType(String dataType) {
this.dataType = dataType;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SnapshotDataDto that = (SnapshotDataDto) o;
+
+ if (id != that.id) return false;
+ if (resourceId != that.resourceId) return false;
+ if (snapshotId != that.snapshotId) return false;
+ if (data != null ? !data.equals(that.data) : that.data != null) return false;
+ if (dataType != null ? !dataType.equals(that.dataType) : that.dataType != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (id ^ (id >>> 32));
+ result = 31 * result + (int) (snapshotId ^ (snapshotId >>> 32));
+ result = 31 * result + (int) (resourceId ^ (resourceId >>> 32));
+ result = 31 * result + (data != null ? data.hashCode() : 0);
+ result = 31 * result + (dataType != null ? dataType.hashCode() : 0);
+ return result;
+ }
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/source/Highlightable.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/source/Highlightable.java
index ae3fecf7aa5..bcf64e54cd0 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/scan/source/Highlightable.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/scan/source/Highlightable.java
@@ -26,5 +26,18 @@ import org.sonar.api.component.Perspective;
*/
public interface Highlightable extends Perspective {
+ interface SyntaxHighlighter {
+
+ SyntaxHighlighter highlightText(int startOffset, int endOffset, String typeOfText);
+
+ void applyHighlighting();
+ }
+
+ SyntaxHighlighter createHighlighter();
+
+ /*
+ * @deprecated in favor of the provided builder-based api
+ */
+ @Deprecated
void highlightText(int startOffset, int endOffset, String typeOfText);
}