From: Robert Varga Date: Sun, 6 Dec 2020 12:37:39 +0000 (+0100) Subject: Add UnqualifiedQName.tryCreate() X-Git-Tag: v6.0.2~6 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=c7e8081901536d97a12b141cbb538f70c7a93d61 Add UnqualifiedQName.tryCreate() 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 --- diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java index d24ed22b1c..d86c5c407f 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java @@ -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); } diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java index 0b6bffb54e..821bc910a1 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java @@ -44,6 +44,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)}. diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index 1f02d8b98a..c34936e64b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -9,9 +9,9 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import com.google.common.collect.ImmutableList; 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.meta.EffectiveStatement; @@ -82,10 +82,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));