]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5437 Support colon character in rule keys
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 9 Jul 2014 14:12:22 +0000 (16:12 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 9 Jul 2014 14:12:22 +0000 (16:12 +0200)
sonar-plugin-api/src/main/java/org/sonar/api/rule/RuleKey.java
sonar-plugin-api/src/test/java/org/sonar/api/rule/RuleKeyTest.java

index a474347df74b5c9a25e69226e066b2de0b6567f8..9d316d5a250451eb4730828147e0be038ac02a5e 100644 (file)
@@ -53,9 +53,11 @@ public class RuleKey implements Serializable {
    * if the format is not valid.
    */
   public static RuleKey parse(String s) {
-    String[] split = s.split(":");
-    Preconditions.checkArgument(split.length == 2, "Invalid rule key: " + s);
-    return RuleKey.of(split[0], split[1]);
+    int semiColonPos = s.indexOf(":");
+    Preconditions.checkArgument(semiColonPos > 0, "Invalid rule key: " + s);
+    String key = s.substring(0, semiColonPos);
+    String repo = s.substring(semiColonPos + 1);
+    return RuleKey.of(key, repo);
   }
 
   /**
index 150ed5efac96928c88ce1bbed6fb37afb29a3f4d..d5190d941ae1b1656785f83d32898ec7f6f9e709 100644 (file)
@@ -25,6 +25,7 @@ import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 
 public class RuleKeyTest {
+
   @Test
   public void testOf() throws Exception {
     RuleKey key = RuleKey.of("squid", "NullDeref");
@@ -32,6 +33,13 @@ public class RuleKeyTest {
     assertThat(key.rule()).isEqualTo("NullDeref");
   }
 
+  @Test
+  public void key_can_contain_colons() throws Exception {
+    RuleKey key = RuleKey.of("squid", "Key:With:Some::Colons");
+    assertThat(key.repository()).isEqualTo("squid");
+    assertThat(key.rule()).isEqualTo("Key:With:Some::Colons");
+  }
+
   @Test
   public void repository_must_not_be_null() throws Exception {
     try {
@@ -73,7 +81,7 @@ public class RuleKeyTest {
   }
 
   @Test
-  public void should_encode_and_decode_string() throws Exception {
+  public void encode_and_decode_string() throws Exception {
     RuleKey key = RuleKey.of("squid", "NullDeref");
     String serialized = key.toString();
     assertThat(serialized).isEqualTo("squid:NullDeref");
@@ -84,7 +92,14 @@ public class RuleKeyTest {
   }
 
   @Test
-  public void should_not_accept_bad_format() throws Exception {
+  public void parse_key_with_colons() throws Exception {
+    RuleKey key = RuleKey.parse("squid:Key:With:Some::Colons");
+    assertThat(key.repository()).isEqualTo("squid");
+    assertThat(key.rule()).isEqualTo("Key:With:Some::Colons");
+  }
+
+  @Test
+  public void not_accept_bad_format() throws Exception {
     try {
       RuleKey.parse("foo");
       fail();