]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2151: Add new property to manage source encoding
authorEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 28 Jan 2011 10:16:11 +0000 (13:16 +0300)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 28 Jan 2011 10:16:11 +0000 (13:16 +0300)
sonar-batch/src/main/java/org/sonar/batch/MavenProjectBuilder.java
sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java
sonar-plugin-api/src/test/java/org/sonar/api/test/MavenTestUtils.java

index d10a4b355160956dbe624db93bafa80d985360c0..7fde1c352b71a3b9f8fda07c52e09163fc94850e 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.batch;
 
 import org.apache.commons.configuration.*;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.maven.project.MavenProject;
 import org.sonar.api.CoreProperties;
@@ -79,18 +80,23 @@ public class MavenProjectBuilder {
     MavenProject pom = project.getPom();
     if (pom != null) {
       /*
-       * TODO actually this is a dirty hack to get Java source and target versions from maven-compiler-plugin
+       * TODO actually this is a dirty hack
        * See http://jira.codehaus.org/browse/SONAR-2148
-       * In fact we should try to get rid of it and use concept of configurator,
-       * which would be active only in Maven environment
-       * and would be responsible for setting values from corresponding maven-plugin.
+       * Get Java source and target versions from maven-compiler-plugin.
        */
-      if (projectConfiguration.getProperty(JavaUtils.JAVA_SOURCE_PROPERTY) == null) {
+      if (StringUtils.isBlank(projectConfiguration.getString(JavaUtils.JAVA_SOURCE_PROPERTY))) {
         projectConfiguration.setProperty(JavaUtils.JAVA_SOURCE_PROPERTY, MavenUtils.getJavaSourceVersion(pom));
       }
-      if (projectConfiguration.getProperty(JavaUtils.JAVA_TARGET_PROPERTY) == null) {
+      if (StringUtils.isBlank(projectConfiguration.getString(JavaUtils.JAVA_TARGET_PROPERTY))) {
         projectConfiguration.setProperty(JavaUtils.JAVA_TARGET_PROPERTY, MavenUtils.getJavaVersion(pom));
       }
+      /*
+       * See http://jira.codehaus.org/browse/SONAR-2151
+       * Get source encoding from POM
+       */
+      if (StringUtils.isBlank(projectConfiguration.getString(CoreProperties.ENCODING_PROPERTY))) {
+        projectConfiguration.setProperty(CoreProperties.ENCODING_PROPERTY, MavenUtils.getSourceEncoding(pom));
+      }
     }
     project.setConfiguration(projectConfiguration)
         .setExclusionPatterns(loadExclusionPatterns(projectConfiguration))
index 235126c79e1b7c116c7d30d659396cc1e5fcb594..f39be2c6c7a836e21f0e67730f385875ded3a371 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.api;
 
+import org.sonar.api.resources.ProjectFileSystem;
+
 /**
  * CoreProperties is used to group various properties of Sonar as well
  * as default values of configuration in a single place
@@ -37,6 +39,13 @@ public interface CoreProperties {
    */
   String PROJECT_KEY_PROPERTY = "sonar.projectKey";
 
+  /**
+   * To determine value of this property use {@link ProjectFileSystem#getSourceCharset()}.
+   * 
+   * @since 2.6
+   */
+  String ENCODING_PROPERTY = "sonar.sourceEncoding";
+
   /**
    * Value format is yyyy-MM-dd
    */
index 58719ab80bbe1b84ea9f224e69301649298a17d1..cfcb7e81485e25f9a29ae39e4b2a4b40f6af4142 100644 (file)
@@ -30,7 +30,7 @@ import java.util.Collection;
 
 /**
  * An utility class to manipulate Maven concepts
- *
+ * 
  * @since 1.10
  */
 public final class MavenUtils {
@@ -44,7 +44,7 @@ public final class MavenUtils {
 
   /**
    * Returns the version of Java used by the maven compiler plugin
-   *
+   * 
    * @param pom the project pom
    * @return the java version
    */
@@ -66,7 +66,7 @@ public final class MavenUtils {
 
   /**
    * Queries a collection of plugins based on a group id and an artifact id and returns the plugin if it exists
-   *
+   * 
    * @param plugins the plugins collection
    * @param groupId the group id
    * @param artifactId the artifact id
@@ -85,7 +85,7 @@ public final class MavenUtils {
 
   /**
    * Tests whether a plugin has got a given artifact id and group id
-   *
+   * 
    * @param plugin the plugin to test
    * @param groupId the group id
    * @param artifactId the artifact id
@@ -103,7 +103,7 @@ public final class MavenUtils {
 
   /**
    * Tests whether a ReportPlugin has got a given artifact id and group id
-   *
+   * 
    * @param plugin the ReportPlugin to test
    * @param groupId the group id
    * @param artifactId the artifact id
@@ -119,14 +119,21 @@ public final class MavenUtils {
     return false;
   }
 
+  /**
+   * @return source encoding
+   */
+  public static String getSourceEncoding(MavenProject pom) {
+    return pom.getProperties().getProperty("project.build.sourceEncoding");
+  }
+
   /**
    * Returns the charset of a pom
-   *
+   * 
    * @param pom the project pom
-   * @return thee charset
+   * @return the charset
    */
   public static Charset getSourceCharset(MavenProject pom) {
-    String encoding = pom.getProperties().getProperty("project.build.sourceEncoding");
+    String encoding = getSourceEncoding(pom);
     if (StringUtils.isNotEmpty(encoding)) {
       try {
         return Charset.forName(encoding);
index 8252b60bf87ef04eed5c272a045f82ba15dddc82..d63e8918d2cb75cafc12b1a9e40b6834761c0c84 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.filefilter.*;
 import org.apache.commons.lang.CharEncoding;
 import org.apache.commons.lang.StringUtils;
+import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.FileFilter;
 import org.sonar.api.utils.Logs;
 import org.sonar.api.utils.SonarException;
@@ -63,8 +64,7 @@ public class DefaultProjectFileSystem implements ProjectFileSystem {
   }
 
   public Charset getSourceCharset() {
-    // TODO was return MavenUtils.getSourceCharset(project.getPom());
-    String encoding = project.getConfiguration().getString("project.build.sourceEncoding");
+    String encoding = project.getConfiguration().getString(CoreProperties.ENCODING_PROPERTY);
     if (StringUtils.isNotEmpty(encoding)) {
       try {
         return Charset.forName(encoding);
index 7ab0604e2237bb0745afa76de73c0a50a8df9fbc..609d86cc9135017d031c31f853d4b8335d6d6d1d 100644 (file)
  */
 package org.sonar.api.test;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.MapConfiguration;
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.project.MavenProject;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.batch.maven.MavenUtils;
 import org.sonar.api.resources.DefaultProjectFileSystem;
 import org.sonar.api.resources.Java;
 import org.sonar.api.resources.Languages;
@@ -66,9 +69,13 @@ public final class MavenTestUtils {
 
   public static Project loadProjectFromPom(Class clazz, String path) {
     MavenProject pom = loadPom(clazz, path);
+    Configuration configuration = new MapConfiguration(pom.getProperties());
     Project project = new Project(pom.getGroupId() + ":" + pom.getArtifactId())
         .setPom(pom)
-        .setConfiguration(new MapConfiguration(pom.getProperties()));
+        .setConfiguration(configuration);
+    configuration.setProperty("sonar.java.source", MavenUtils.getJavaSourceVersion(pom));
+    configuration.setProperty("sonar.java.target", MavenUtils.getJavaVersion(pom));
+    configuration.setProperty(CoreProperties.ENCODING_PROPERTY, MavenUtils.getSourceEncoding(pom));
     DefaultProjectFileSystem fs = new DefaultProjectFileSystem(project, new Languages(Java.INSTANCE));
     project.setFileSystem(fs);
     return project;