Add AbstractQName.unbind() 08/104208/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 31 Jan 2023 22:43:44 +0000 (23:43 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Mar 2023 15:02:00 +0000 (16:02 +0100)
Acquiring a simple, namespace-free UnresolvedQName.Unqualified is
usefule in a few contexts, where we for convenience now require
AbstractQName (and document we only use its localName).

Introduce AbstractQName.unbind(), which returns an Unqualified object,
so that these users can be more expressive and can use direct equals
comparisons.

Change-Id: I1a485e05d2bb13c2012fc017a6b30795a8891a80
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java
common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java

index 6ce6d2100d9a2991812922995e5b34afd82819c8..cba2118951ebaf6d2a967ec4c14d32b13db54efa 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.common;
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
-import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.Identifier;
 import org.opendaylight.yangtools.concepts.WritableObject;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 
 /**
  * Abstract superclass for sharing QName references, which can either be resolved {@link QName}s or unresolved
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.concepts.WritableObject;
  */
 @NonNullByDefault
 public abstract sealed class AbstractQName implements Identifier, WritableObject permits QName, UnresolvedQName {
-    @Serial
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
     private final String localName;
@@ -67,6 +67,15 @@ public abstract sealed class AbstractQName implements Identifier, WritableObject
         return new QName(namespace, localName);
     }
 
+    /**
+     * Returns an {@link Unqualified} identifier formed by capturing {@link #getLocalName()}.
+     *
+     * @return An unqualified {@link UnresolvedQName}
+     */
+    public Unqualified unbind() {
+        return new Unqualified(localName);
+    }
+
     /**
      * Check whether a string is a valid {@code localName}.
      *
@@ -77,7 +86,7 @@ public abstract sealed class AbstractQName implements Identifier, WritableObject
         return str != null && !str.isEmpty() && checkContent(str);
     }
 
-    @Serial
+    @java.io.Serial
     abstract Object writeReplace();
 
     static final String checkLocalName(final @Nullable String localName) {
index 274480404ffa1f12106535f85e393ada94f075ba..73452c02233bda04d9c4846b71c40fd98db5b6b4 100644 (file)
@@ -16,7 +16,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.Serial;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -37,7 +36,7 @@ public abstract sealed class UnresolvedQName extends AbstractQName {
      * through {@link #bindTo(YangNamespaceContext)}.
      */
     public static final class Qualified extends UnresolvedQName implements Comparable<Qualified> {
-        @Serial
+        @java.io.Serial
         private static final long serialVersionUID = 1L;
         private static final Interner<Qualified> INTERNER = Interners.newWeakInterner();
 
@@ -135,11 +134,11 @@ public abstract sealed class UnresolvedQName extends AbstractQName {
      * {@link #bindTo(QNameModule)}.
      */
     public static final class Unqualified extends UnresolvedQName implements Comparable<Unqualified> {
-        @Serial
+        @java.io.Serial
         private static final long serialVersionUID = 1L;
         private static final Interner<Unqualified> INTERNER = Interners.newWeakInterner();
 
-        private Unqualified(final String localName) {
+        Unqualified(final String localName) {
             super(localName);
         }
 
@@ -167,6 +166,11 @@ public abstract sealed class UnresolvedQName extends AbstractQName {
             return of(in.readUTF());
         }
 
+        @Override
+        public Unqualified unbind() {
+            return this;
+        }
+
         @Override
         @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check")
         public Unqualified intern() {
@@ -219,7 +223,7 @@ public abstract sealed class UnresolvedQName extends AbstractQName {
         }
     }
 
-    @Serial
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
     private UnresolvedQName(final String localName) {