aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/highlighting/HighlightingMediumTest.java27
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java39
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java4
3 files changed, 36 insertions, 34 deletions
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/highlighting/HighlightingMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/highlighting/HighlightingMediumTest.java
index 8b42d6a5b67..96ce8e035e7 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/highlighting/HighlightingMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/highlighting/HighlightingMediumTest.java
@@ -19,9 +19,9 @@
*/
package org.sonar.batch.mediumtest.highlighting;
-import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -101,16 +101,20 @@ public class HighlightingMediumTest {
File srcDir = new File(baseDir, "src");
srcDir.mkdir();
- File xooFile = new File(srcDir, "sample.xoo");
- File xoohighlightingFile = new File(srcDir, "sample.xoo.highlighting");
- int chunkSize = 100000;
- FileUtils.write(xooFile, Strings.repeat("a", chunkSize));
- StringBuilder sb = new StringBuilder(16 * chunkSize);
- for (int i = 0; i < chunkSize; i++) {
- sb.append(i).append(":").append(i + 1).append(":s\n");
+ int nbFiles = 10;
+ int ruleCount = 100000;
+ int nblines = 1000;
+ int linesize = ruleCount / nblines;
+ for (int nb = 1; nb <= nbFiles; nb++) {
+ File xooFile = new File(srcDir, "sample" + nb + ".xoo");
+ File xoohighlightingFile = new File(srcDir, "sample" + nb + ".xoo.highlighting");
+ FileUtils.write(xooFile, StringUtils.repeat(StringUtils.repeat("a", linesize) + "\n", nblines));
+ StringBuilder sb = new StringBuilder(16 * ruleCount);
+ for (int i = 0; i < ruleCount; i++) {
+ sb.append(i).append(":").append(i + 1).append(":s\n");
+ }
+ FileUtils.write(xoohighlightingFile, sb.toString());
}
- FileUtils.write(xoohighlightingFile, sb.toString());
-
long start = System.currentTimeMillis();
TaskResult result = tester.newTask()
.properties(ImmutableMap.<String, String>builder()
@@ -125,9 +129,6 @@ public class HighlightingMediumTest {
.start();
System.out.println("Duration: " + (System.currentTimeMillis() - start));
- InputFile file = result.inputFile("src/sample.xoo");
- assertThat(result.highlightingTypeFor(file, 1, 0)).containsExactly(TypeOfText.STRING);
-
}
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java
index 50bb7cbab30..ee42c236353 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java
@@ -20,7 +20,6 @@
package org.sonar.api.batch.sensor.highlighting.internal;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Sets;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
@@ -30,14 +29,12 @@ import org.sonar.api.batch.sensor.internal.SensorStorage;
import javax.annotation.Nullable;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Set;
+import java.util.*;
public class DefaultHighlighting extends DefaultStorable implements NewHighlighting {
private DefaultInputFile inputFile;
- private Set<SyntaxHighlightingRule> syntaxHighlightingRuleSet;
+ private List<SyntaxHighlightingRule> syntaxHighlightingRules;
public DefaultHighlighting() {
this(null);
@@ -45,25 +42,16 @@ public class DefaultHighlighting extends DefaultStorable implements NewHighlight
public DefaultHighlighting(@Nullable SensorStorage storage) {
super(storage);
- syntaxHighlightingRuleSet = Sets.newTreeSet(new Comparator<SyntaxHighlightingRule>() {
- @Override
- public int compare(SyntaxHighlightingRule left, SyntaxHighlightingRule right) {
- int result = left.range().start().compareTo(right.range().start());
- if (result == 0) {
- result = right.range().end().compareTo(left.range().end());
- }
- return result;
- }
- });
+ syntaxHighlightingRules = new ArrayList<>();
}
- public Set<SyntaxHighlightingRule> getSyntaxHighlightingRuleSet() {
- return syntaxHighlightingRuleSet;
+ public List<SyntaxHighlightingRule> getSyntaxHighlightingRuleSet() {
+ return syntaxHighlightingRules;
}
private void checkOverlappingBoudaries() {
- if (syntaxHighlightingRuleSet.size() > 1) {
- Iterator<SyntaxHighlightingRule> it = syntaxHighlightingRuleSet.iterator();
+ if (syntaxHighlightingRules.size() > 1) {
+ Iterator<SyntaxHighlightingRule> it = syntaxHighlightingRules.iterator();
SyntaxHighlightingRule previous = it.next();
while (it.hasNext()) {
SyntaxHighlightingRule current = it.next();
@@ -92,13 +80,24 @@ public class DefaultHighlighting extends DefaultStorable implements NewHighlight
public DefaultHighlighting highlight(int startOffset, int endOffset, TypeOfText typeOfText) {
Preconditions.checkState(inputFile != null, "Call onFile() first");
SyntaxHighlightingRule syntaxHighlightingRule = SyntaxHighlightingRule.create(inputFile.newRange(startOffset, endOffset), typeOfText);
- this.syntaxHighlightingRuleSet.add(syntaxHighlightingRule);
+ this.syntaxHighlightingRules.add(syntaxHighlightingRule);
return this;
}
@Override
protected void doSave() {
Preconditions.checkState(inputFile != null, "Call onFile() first");
+ // Sort rules to avoid variation during consecutive runs
+ Collections.sort(syntaxHighlightingRules, new Comparator<SyntaxHighlightingRule>() {
+ @Override
+ public int compare(SyntaxHighlightingRule left, SyntaxHighlightingRule right) {
+ int result = left.range().start().compareTo(right.range().start());
+ if (result == 0) {
+ result = right.range().end().compareTo(left.range().end());
+ }
+ return result;
+ }
+ });
checkOverlappingBoudaries();
storage.store(this);
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
index 79f7db9e06b..03726d4d74a 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
@@ -52,7 +52,7 @@ public class DefaultHighlightingTest {
@Before
public void setUpSampleRules() {
- DefaultHighlighting highlightingDataBuilder = new DefaultHighlighting()
+ DefaultHighlighting highlightingDataBuilder = new DefaultHighlighting(mock(SensorStorage.class))
.onFile(INPUT_FILE)
.highlight(0, 10, COMMENT)
.highlight(10, 12, KEYWORD)
@@ -61,6 +61,8 @@ public class DefaultHighlightingTest {
.highlight(24, 65, CPP_DOC)
.highlight(12, 20, COMMENT);
+ highlightingDataBuilder.save();
+
highlightingRules = highlightingDataBuilder.getSyntaxHighlightingRuleSet();
}