import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.batch.report.ReportPublisher;
-import org.sonar.colorizer.CodeColorizer;
-/**
- * Execute deprecated {@link CodeColorizer} if necessary.
- */
@Phase(name = Phase.Name.POST)
public final class CodeColorizerSensor implements Sensor {
package org.sonar.batch.source;
import com.google.common.collect.Lists;
-import org.apache.commons.io.input.BOMInputStream;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.sonar.api.batch.BatchSide;
-import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
-import org.sonar.api.web.CodeColorizerFormat;
-import org.sonar.colorizer.CodeColorizer;
-import org.sonar.colorizer.Tokenizer;
-
-import javax.annotation.CheckForNull;
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.CheckForNull;
+import org.apache.commons.io.input.BOMInputStream;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonar.api.batch.BatchSide;
+import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
+import org.sonar.api.web.CodeColorizerFormat;
+import org.sonar.colorizer.JavaTokenizers;
+import org.sonar.colorizer.Tokenizer;
/**
* Central point for sonar-colorizer extensions
// TODO can be dropped when Java plugin embed its own CodeColorizerFormat of (better) provides highlighting for tests
// See SONARJAVA-830
if ("java".equals(language)) {
- tokenizers = CodeColorizer.Format.JAVA.getTokenizers();
+ tokenizers = JavaTokenizers.forHtml();
} else {
return;
}
<description>Code syntax highlighter</description>
<dependencies>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-channel</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
this.tokenizers = format.getTokenizers();
}
- public String toHtml(Reader code) {
- return toHtml(code, null);
- }
-
public String toHtml(Reader code, @Nullable HtmlOptions options) {
HtmlOptions opts = options == null ? HtmlOptions.DEFAULT : options;
return new HtmlRenderer(opts).render(code, tokenizers);
return new CodeColorizer(Format.GROOVY).toHtml(code, options);
}
- public static String getCss() {
- return HtmlDecorator.getCss();
- }
-
public enum Format {
JAVA(JavaTokenizers.forHtml()), GROOVY(GroovyTokenizers.forHtml());
*/
package org.sonar.colorizer;
-import com.google.common.collect.ImmutableSet;
-
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.Set;
/**
*/
@Deprecated
public final class GroovyKeywords {
- private static final Set<String> KEYWORDS = ImmutableSet.of(
- "as", "assert", "break", "case", "catch", "class", "continue", "def",
- "default", "do", "else", "extends", "finally", "for", "if", "in", "implements", "import", "instanceof", "interface", "new", "package",
- "property", "return", "switch", "throw", "throws", "try", "while");
+
+ private static final Set<String> KEYWORDS = new HashSet<>();
+
+ static {
+ KEYWORDS.addAll(Arrays.asList("as", "assert", "break", "case", "catch", "class", "continue", "def",
+ "default", "do", "else", "extends", "finally", "for", "if", "in", "implements", "import", "instanceof", "interface", "new", "package",
+ "property", "return", "switch", "throw", "throws", "try", "while"));
+ }
private GroovyKeywords() {
}
*/
package org.sonar.colorizer;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Closeables;
import org.sonar.channel.CodeReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-
/**
* @deprecated since 4.5.2 replace by highlighting mechanism
*/
@Deprecated
public class HtmlDecorator extends Tokenizer {
- private static final String CSS_PATH = "/sonar-colorizer.css";
-
private HtmlOptions options;
private int lineId;
StringBuilder sb = new StringBuilder();
if (options.isGenerateHtmlHeader()) {
sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
- + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html><head><style type=\"text/css\">");
- sb.append(getCss());
- sb.append("</style></head><body>");
+ + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html><body>");
}
sb.append("<table class=\"code\" id=\"");
if (options.getTableId() != null) {
}
return false;
}
-
- public static String getCss() {
- InputStream input = null;
- try {
- input = HtmlRenderer.class.getResourceAsStream(CSS_PATH);
- return new String(ByteStreams.toByteArray(input), StandardCharsets.UTF_8);
-
- } catch (IOException e) {
- throw new SynhtaxHighlightingException("SonarQube Colorizer CSS file not found: " + CSS_PATH, e);
-
- } finally {
- Closeables.closeQuietly(input);
- }
- }
}
*/
package org.sonar.colorizer;
-import com.google.common.collect.ImmutableSet;
-
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
/**
@Deprecated
public final class JavaKeywords {
- private static final Set<String> KEYWORDS = ImmutableSet.of(
+ private static final Set<String> KEYWORDS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char",
"class", "const", "continue", "default",
"do", "double", "else", "enum", "extends", "false", "final", "finally", "float", "for",
"goto", "if", "implements", "import", "instanceof",
"int", "interface", "long", "native", "new", "null", "package", "private",
"protected", "public", "return", "short", "static", "strictfp",
- "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while");
+ "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while")));
private JavaKeywords() {
}
@Deprecated
public final class JavaTokenizers {
+ private static final List<Tokenizer> TOKENIZERS = Collections.unmodifiableList(Arrays.asList(
+ new JavaAnnotationTokenizer("<span class=\"a\">", "</span>"),
+ new LiteralTokenizer("<span class=\"s\">", "</span>"),
+ new CDocTokenizer("<span class=\"cd\">", "</span>"),
+ new JavadocTokenizer("<span class=\"j\">", "</span>"),
+ new CppDocTokenizer("<span class=\"cppd\">", "</span>"),
+ new JavaConstantTokenizer("<span class=\"c\">", "</span>"),
+ new KeywordsTokenizer("<span class=\"k\">", "</span>", JavaKeywords.get())));
+
private JavaTokenizers() {
+ // only static stuff
}
public static List<Tokenizer> forHtml() {
- return Collections.unmodifiableList(Arrays.asList(
- new JavaAnnotationTokenizer("<span class=\"a\">", "</span>"),
- new LiteralTokenizer("<span class=\"s\">", "</span>"),
- new CDocTokenizer("<span class=\"cd\">", "</span>"),
- new JavadocTokenizer("<span class=\"j\">", "</span>"),
- new CppDocTokenizer("<span class=\"cppd\">", "</span>"),
- new JavaConstantTokenizer("<span class=\"c\">", "</span>"),
- new KeywordsTokenizer("<span class=\"k\">", "</span>", JavaKeywords.get())));
+ return TOKENIZERS;
}
}
assertContains(html, "<pre><span class=\"k\">class</span> Greet {</pre>");
}
- @Test
- public void getCss() {
- assertThat(CodeColorizer.getCss().length()).isGreaterThan(100);
- assertThat(CodeColorizer.getCss()).contains(".code");
- }
-
@Test
public void mustBeThreadsafe() throws InterruptedException, ExecutionException, IOException {
final int taskCount = 50;
}
private void assertHtml(String html) {
- assertContains(html, "<style", "<table class=\"code\"", "</html>");
+ assertContains(html, "<table class=\"code\"", "</html>");
}
private void assertContains(String html, String... strings) {
public void beginOfFileTag() {
HtmlDecorator decorator = new HtmlDecorator(HtmlOptions.DEFAULT);
String tag = decorator.getTagBeginOfFile();
- assertContains(tag, "<html", "<style", "<table");
+ assertContains(tag, "<html", "<table");
}
@Test
String tag = decorator.getTagBeginOfFile();
- assertNotContains(tag, "<html", "<style");
+ assertNotContains(tag, "<html", "<body");
assertContains(tag, "<table");
}
);
}
- @Test
- public void getCss() {
- assertThat(HtmlDecorator.getCss().length()).isGreaterThan(100);
- assertThat(HtmlDecorator.getCss()).contains(".code");
- }
-
public void assertContains(String html, String... strings) {
for (String string : strings) {
assertThat(html).contains(string);
String html = new HtmlRenderer().render(new FileReader(java), Arrays.asList(javaKeywordTokenizer));
assertThat(html).contains("<html>");
- assertThat(html).contains("<style");
assertThat(html).contains("<table class=\"code\"");
assertThat(html).contains("public");
assertThat(html).contains("class");