diff options
-rw-r--r-- | src/main/assembly/conf/sonar-runner.properties | 3 | ||||
-rw-r--r-- | src/main/java/org/sonar/runner/Main.java | 2 | ||||
-rw-r--r-- | src/main/java/org/sonar/runner/Runner.java | 20 | ||||
-rw-r--r-- | src/test/java/org/sonar/runner/RunnerTest.java | 16 |
4 files changed, 37 insertions, 4 deletions
diff --git a/src/main/assembly/conf/sonar-runner.properties b/src/main/assembly/conf/sonar-runner.properties index 4a5154d..0a0bb2e 100644 --- a/src/main/assembly/conf/sonar-runner.properties +++ b/src/main/assembly/conf/sonar-runner.properties @@ -22,4 +22,5 @@ #tests=src/test/java #binaries=target/classes -sonar.sourceEncoding=UTF-8 +#----- Default source code encoding +#sonar.sourceEncoding=UTF-8 diff --git a/src/main/java/org/sonar/runner/Main.java b/src/main/java/org/sonar/runner/Main.java index 09a4c01..ee3449b 100644 --- a/src/main/java/org/sonar/runner/Main.java +++ b/src/main/java/org/sonar/runner/Main.java @@ -25,6 +25,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Locale; import java.util.Properties; /** @@ -68,6 +69,7 @@ public final class Main { Logs.info("Java version: " + System.getProperty("java.version", "<unknown>") + ", vendor: " + System.getProperty("java.vendor", "<unknown>")); Logs.info("OS name: \"" + System.getProperty("os.name") + "\", version: \"" + System.getProperty("os.version") + "\", arch: \"" + System.getProperty("os.arch") + "\""); + Logs.info("Default locale: \"" + Locale.getDefault() + "\", source code encoding: \"" + runner.getSourceCodeEncoding() + "\""); if (debugMode) { Logs.info("Other system properties:"); Logs.info(" - sun.arch.data.model: \"" + System.getProperty("sun.arch.data.model") + "\""); diff --git a/src/main/java/org/sonar/runner/Runner.java b/src/main/java/org/sonar/runner/Runner.java index 6c4e6df..e17face 100644 --- a/src/main/java/org/sonar/runner/Runner.java +++ b/src/main/java/org/sonar/runner/Runner.java @@ -25,6 +25,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Properties; @@ -102,6 +103,8 @@ public final class Runner { */ private static final String[] UNSUPPORTED_VERSIONS = {"1", "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10"}; + private static final String PROPERTY_SOURCE_ENCODING = "sonar.sourceEncoding"; + private File projectDir; private File workDir; private String[] unmaskedPackages; @@ -114,6 +117,10 @@ public final class Runner { // set the default values for the Sonar Runner - they can be overriden with #setEnvironmentInformation this.properties.put(PROPERTY_ENVIRONMENT_INFORMATION_KEY, "Runner"); this.properties.put(PROPERTY_ENVIRONMENT_INFORMATION_VERSION, Version.getVersion()); + // sets the encoding if not forced + if (!properties.containsKey(PROPERTY_SOURCE_ENCODING)) { + properties.setProperty(PROPERTY_SOURCE_ENCODING, Charset.defaultCharset().name()); + } // and init the directories initDirs(); } @@ -187,6 +194,13 @@ public final class Runner { } /** + * @return the source code encoding that will be used by Sonar + */ + public String getSourceCodeEncoding() { + return properties.getProperty(PROPERTY_SOURCE_ENCODING); + } + + /** * @return global properties, project properties and command-line properties */ protected Properties getProperties() { @@ -204,9 +218,9 @@ public final class Runner { private BootstrapClassLoader createClassLoader(Bootstrapper bootstrapper) { URL url = getJarPath(); return bootstrapper.createClassLoader( - new URL[]{url}, // Add JAR with Sonar Runner - it's a Jar which contains this class - getClass().getClassLoader(), - unmaskedPackages); + new URL[] {url}, // Add JAR with Sonar Runner - it's a Jar which contains this class + getClass().getClassLoader(), + unmaskedPackages); } /** diff --git a/src/test/java/org/sonar/runner/RunnerTest.java b/src/test/java/org/sonar/runner/RunnerTest.java index 6313aaa..47c3c5c 100644 --- a/src/test/java/org/sonar/runner/RunnerTest.java +++ b/src/test/java/org/sonar/runner/RunnerTest.java @@ -25,6 +25,7 @@ import org.junit.rules.ExpectedException; import org.sonar.test.TestUtils; import java.io.File; +import java.nio.charset.Charset; import java.util.Properties; import static org.fest.assertions.Assertions.assertThat; @@ -37,6 +38,21 @@ public class RunnerTest { public ExpectedException thrown = ExpectedException.none(); @Test + public void shouldHaveDefaultEncodingIfNotForce() { + Runner runner = Runner.create(new Properties()); + assertThat(runner.getSourceCodeEncoding()).isEqualTo(Charset.defaultCharset().name()); + } + + @Test + public void shouldKeepEncodingIfSpecified() { + Properties props = new Properties(); + // Yeah, windows charset! + props.setProperty("sonar.sourceEncoding", "cp1252"); + Runner runner = Runner.create(props); + assertThat(runner.getSourceCodeEncoding()).isEqualTo("cp1252"); + } + + @Test public void shouldHaveDefaultEnvironmentInformationValues() { Runner runner = Runner.create(new Properties()); assertThat(runner.getProperties().getProperty(Runner.PROPERTY_ENVIRONMENT_INFORMATION_KEY)).isEqualTo("Runner"); |