diff options
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(); } |