Guard Pattern constants with @RegEx 38/40338/8
authorRobert Varga <rovarga@cisco.com>
Tue, 14 Jun 2016 23:50:14 +0000 (01:50 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 2 Nov 2016 10:10:19 +0000 (10:10 +0000)
We use some hard-coded patterns, extract them to string constants
and annotate those with @RegEx, so they are compile-time validated.

Change-Id: I651d18d665c42abb9402e4ae4669ae058f07b159
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java

index d9b8ecd620bdf254c572b582128b3d28e367c51b..12a01fa1b820e45816680d251a08c09a87216a47 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Date;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.RegEx;
 import org.opendaylight.yangtools.concepts.Immutable;
 
 /**
@@ -55,10 +56,19 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
     static final String QNAME_LEFT_PARENTHESIS = "(";
     static final String QNAME_RIGHT_PARENTHESIS = ")";
 
-    private static final Pattern QNAME_PATTERN_FULL = Pattern.compile("^\\((.+)\\" + QNAME_REVISION_DELIMITER
-            + "(.+)\\)(.+)$");
-    private static final Pattern QNAME_PATTERN_NO_REVISION = Pattern.compile("^\\((.+)\\)(.+)$");
-    private static final Pattern QNAME_PATTERN_NO_NAMESPACE_NO_REVISION = Pattern.compile("^(.+)$");
+    @RegEx
+    private static final String QNAME_STRING_FULL = "^\\((.+)\\?revision=(.+)\\)(.+)$";
+    private static final Pattern QNAME_PATTERN_FULL = Pattern.compile(QNAME_STRING_FULL);
+
+    @RegEx
+    private static final String QNAME_STRING_NO_REVISION = "^\\((.+)\\)(.+)$";
+    private static final Pattern QNAME_PATTERN_NO_REVISION = Pattern.compile(QNAME_STRING_NO_REVISION);
+
+    @RegEx
+    private static final String QNAME_STRING_NO_NAMESPACE_NO_REVISION = "^(.+)$";
+    private static final Pattern QNAME_PATTERN_NO_NAMESPACE_NO_REVISION =
+        Pattern.compile(QNAME_STRING_NO_NAMESPACE_NO_REVISION);
+
     private static final char[] ILLEGAL_CHARACTERS = new char[] { '?', '(', ')', '&' };
 
     // Non-null