Improve AbstractNamespaceCodec 34/108034/3
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 28 Sep 2023 21:46:00 +0000 (23:46 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 5 Oct 2023 13:47:57 +0000 (15:47 +0200)
Improve nullness guarantees in createQName().

Change-Id: Icdb58b2ede7a5e2b8f380614719f3a1842255e53
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNamespaceCodec.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractStringInstanceIdentifierCodec.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/XpathStringParsingPathArgumentBuilder.java

index e93ec24da9424210024aba89d93121679378a034..bfda55640282846c0bd421fd138157d934a11016 100644 (file)
@@ -35,10 +35,10 @@ abstract class AbstractNamespaceCodec<T> extends AbstractIllegalArgumentCodec<St
      * @param prefix Prefix for namespace
      * @param localName local name
      * @return QName
-     * @throws IllegalArgumentException if the prefix cannot be resolved
+     * @throws IllegalArgumentException if the {@code prefix} cannot be resolved or if the {@code localName} does not
+     *                                  conform to YANG requirements
      */
-    // FIXME: 9.0.0: this should really be @NonNull, right? we can also throw if localName is not valid
-    protected abstract @Nullable QName createQName(@NonNull String prefix, @NonNull String localName);
+    protected abstract @NonNull QName createQName(@NonNull String prefix, @NonNull String localName);
 
     private static String getIdAndPrefixAsStr(final String pathPart) {
         int predicateStartIndex = pathPart.indexOf('[');
index be923a7de23862d3c0e76257c4364d6395710953..23752a64451ff6e3f869ab3edf226f11d9a509f5 100644 (file)
@@ -170,7 +170,7 @@ public abstract class AbstractStringInstanceIdentifierCodec extends AbstractName
      * @param localName Local name string
      * @return A newly-created QName
      */
-    protected QName createQName(final @Nullable QNameModule lastModule, final String localName) {
+    protected @NonNull QName createQName(final @Nullable QNameModule lastModule, final String localName) {
         // This implementation handles both XML encoding, where we follow XML namespace rules and old JSON encoding,
         // which is the same thing: always encode prefixes
         return createQName(XMLConstants.DEFAULT_NS_PREFIX, localName);
index e238a807863835e38c077dc68e2a928b6d4c19d6..1f22c80b2458a30a3a34209ede704bda45a266ef 100644 (file)
@@ -208,7 +208,7 @@ final class XpathStringParsingPathArgumentBuilder implements Mutable {
      *
      * @return following QName.
      */
-    private QName nextQName() {
+    private @NonNull QName nextQName() {
         // Consume prefix or identifier
         final String maybePrefix = nextIdentifier();
         if (!allCharactersConsumed() && COLON == currentChar()) {