]> source.dussan.org Git - sonarqube.git/commitdiff
Simplify component key validation (one regex, less branches in validateKey)
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 1 Oct 2013 14:52:32 +0000 (16:52 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 2 Oct 2013 08:38:16 +0000 (10:38 +0200)
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectReactorValidator.java
sonar-batch/src/test/java/org/sonar/batch/scan/ProjectReactorValidatorTest.java

index 539da5974e7f8924718b483f66289a49eacfa26a..927976cf0f11e800239770c024af9a964745e313 100644 (file)
  */
 package org.sonar.batch.scan;
 
-import org.sonar.core.resource.ResourceDao;
 import com.google.common.base.Joiner;
-import org.apache.commons.lang.math.NumberUtils;
 import org.codehaus.plexus.util.StringUtils;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.SonarException;
+import org.sonar.core.resource.ResourceDao;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,7 +37,11 @@ import java.util.List;
  */
 public class ProjectReactorValidator {
 
-  private static final String VALID_MODULE_KEY_REGEXP = "[0-9a-zA-Z\\-_\\.:]+";
+  /*
+   * Allowed characters are alphanumeric, dash '-', underscore '_', period '.' and colon ':',
+   * with at least one non-digit
+   */
+  private static final String VALID_MODULE_KEY_REGEXP = "[\\p{Alnum}\\-_.:]*[\\p{Alpha}\\-_.:]+[\\p{Alnum}\\-_.:]*";
   private final Settings settings;
   private final ResourceDao resourceDao;
 
@@ -72,9 +75,7 @@ public class ProjectReactorValidator {
   }
 
   private void validateKey(ProjectDefinition def, List<String> validationMessages) {
-    if (!def.getKey().matches(VALID_MODULE_KEY_REGEXP) ||
-      // SONAR-4629 project key must not only contain digits
-      NumberUtils.isDigits(def.getKey())) {
+    if (!def.getKey().matches(VALID_MODULE_KEY_REGEXP)) {
       validationMessages.add(String.format("%s is not a valid project or module key", def.getKey()));
     }
   }
index 34887e221886f41b83fa30810394b7abd45a346c..2d5398fc1764d87efa117a417da1ac353398e442 100644 (file)
@@ -70,8 +70,15 @@ public class ProjectReactorValidatorTest {
 
   @Test
   public void not_fail_with_valid_key() {
-    ProjectReactor reactor = createProjectReactor("foo");
-    validator.validate(reactor);
+    validator.validate(createProjectReactor("foo"));
+    validator.validate(createProjectReactor("123foo"));
+    validator.validate(createProjectReactor("foo123"));
+    validator.validate(createProjectReactor("1Z3"));
+    validator.validate(createProjectReactor("a123"));
+    validator.validate(createProjectReactor("123a"));
+    validator.validate(createProjectReactor("1:2"));
+    validator.validate(createProjectReactor("3-3"));
+    validator.validate(createProjectReactor("-:"));
   }
 
   @Test