Fix JDK9 pattern handling 01/73301/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 21 Jun 2018 11:04:11 +0000 (13:04 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 21 Jun 2018 11:04:11 +0000 (13:04 +0200)
Java 9's Pattern is reporting different error strings, deal with
that.

Change-Id: I8f3035530f10a77b23f1531c0ced0b0532795608
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java

index 7aab1eaf94658cab1e118d2a421788607d6558be..e9f47a2d56bee6da228aa955513bbbaac69cf862 100644 (file)
@@ -304,8 +304,10 @@ public final class RegexUtils {
                 return rawPattern;
             } catch (final PatternSyntaxException ex) {
                 LOG.debug("Invalid regex pattern syntax in: {}", rawPattern, ex);
-                if (ex.getMessage().contains("Unknown character script name")) {
-                    rawPattern = fixUnknownScripts(ex.getMessage(), rawPattern);
+                final String msg = ex.getMessage();
+                if (msg.startsWith("Unknown character script name")
+                        || msg.startsWith("Unknown character property name")) {
+                    rawPattern = fixUnknownScripts(msg, rawPattern);
                 } else {
                     return rawPattern;
                 }
@@ -320,7 +322,12 @@ public final class RegexUtils {
         StringBuilder result = new StringBuilder(rawPattern);
         final Matcher matcher = BETWEEN_CURLY_BRACES_PATTERN.matcher(exMessage);
         if (matcher.find()) {
-            final String capturedGroup = matcher.group(1);
+            String capturedGroup = matcher.group(1);
+            if (capturedGroup.startsWith("In/Is")) {
+                // Java 9 changed the reporting string
+                capturedGroup = capturedGroup.substring(5);
+            }
+
             if (JAVA_UNICODE_BLOCKS.contains(capturedGroup)) {
                 final int idx = rawPattern.indexOf("Is" + capturedGroup);
                 result = result.replace(idx, idx + 2, "In");