Add UnqualifiedQName.tryCreate() 83/94083/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 6 Dec 2020 12:37:39 +0000 (13:37 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 6 Dec 2020 19:04:46 +0000 (20:04 +0100)
This a better approach to performing a lazy check, as it captures
the valid string in a well-known construct.

JIRA: YANGTOOLS-1191
Change-Id: I7ffe00602d3d83189d9c3f8a59365648aa36720d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit c7e8081901536d97a12b141cbb538f70c7a93d61)

yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java

index 5886d4cc91d4670eb71a5b5e1ffb6318ca6bb50f..30e0fd2016d326c2efcf0dbba0cd835b92a77d34 100644 (file)
@@ -78,7 +78,7 @@ public abstract class AbstractQName implements Identifier, WritableObject {
      * @param str String to check
      * @return True if the string usable as a local name, false otherwise
      */
-    public static final boolean isValidLocalName(final @Nullable String str) {
+    static final boolean isValidLocalName(final @Nullable String str) {
         return str != null && !str.isEmpty() && checkContent(str);
     }
 
index c596dd86b2d9f1a796f970185fbbf4b1915e2641..f6e20c280a62aef3895ddf2d96c2473d1e45c705 100644 (file)
@@ -43,6 +43,17 @@ public final class UnqualifiedQName extends AbstractQName implements Comparable<
         return new UnqualifiedQName(checkLocalName(localName));
     }
 
+    /**
+     * Create a new unqualified QName.
+     *
+     * @param localName The local name of this unqualified QName
+     * @return An UnqualifiedQName instance, or null if localName is not valid
+     */
+    @SuppressFBWarnings(value = "NP_NONNULL_RETURN_VIOLATION", justification = "Non-grok of @Nullable")
+    public static @Nullable UnqualifiedQName tryCreate(final String localName) {
+        return isValidLocalName(localName) ? new UnqualifiedQName(localName) : null;
+    }
+
     /**
      * Read an UnqualifiedQName from a DataInput. The format is expected to match the output format of
      * {@link #writeTo(DataOutput)}.
index 62f9c51d0a0f7ac873b5c0f61ce66001505b14d9..2c63cd3e6c2f6969d2f957830e0be86f81a18ebc 100644 (file)
@@ -8,9 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.AbstractQName;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement;
@@ -72,10 +72,8 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
 
         final int colon = value.indexOf(':');
         if (colon == -1) {
-            if (AbstractQName.isValidLocalName(value)) {
-                return QName.unsafeOf(StmtContextUtils.getRootModuleQName(stmt), value).intern();
-            }
-            return null;
+            final UnqualifiedQName qname = UnqualifiedQName.tryCreate(value);
+            return qname == null ? null : qname.bindTo(StmtContextUtils.getRootModuleQName(stmt)).intern();
         }
 
         final QNameModule qnameModule = StmtContextUtils.getModuleQNameByPrefix(stmt, value.substring(0, colon));