Add AbstractQName.bindTo(QNameModule) 54/86654/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 31 Dec 2019 17:19:02 +0000 (18:19 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 12 Feb 2020 14:04:13 +0000 (15:04 +0100)
Generalize the implementation, as all subclasses provide a variant
of this method.

Change-Id: I4a5f5654f1687a76a3c5f5a2976edae3a90e3245
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QualifiedQName.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java

index 266208b6af3b6a6b6d3ecb36cd9a282dce4151e5..693c861d01c749dbeafe57beb0a106d558384235 100644 (file)
@@ -99,7 +99,7 @@ public final class MountPointStatementSupport
     @Override
     public QName adaptArgumentValue(final StmtContext<QName, MountPointStatement, MountPointEffectiveStatement> ctx,
             final QNameModule targetModule) {
-        return ctx.coerceStatementArgument().withModule(targetModule).intern();
+        return ctx.coerceStatementArgument().bindTo(targetModule).intern();
     }
 
     @Override
index da1521b76df5092ad3630358b9a1754690c89ae9..6709ad94a7db79c306c68166c4fd98948d68fc00 100644 (file)
@@ -61,6 +61,17 @@ public abstract class AbstractQName implements Identifier, WritableObject {
     @Override
     public abstract String toString();
 
+    /**
+     * Returns a QName with the specified namespace and the same local name as this one.
+     *
+     * @param namespace New namespace to use
+     * @return a QName with specified QNameModule and same local name as this one
+     * @throws NullPointerException if namespace is null
+     */
+    public QName bindTo(final QNameModule namespace) {
+        return new QName(namespace, getLocalName());
+    }
+
     abstract Object writeReplace();
 
     static final String checkLocalName(final @Nullable String localName) {
index feea52586a22b94a785c7e7178e6f1877ea9f8e9..46457ec10a4dfdea07e329aab8ba62bb1c0106fe 100644 (file)
@@ -298,14 +298,21 @@ public final class QName extends AbstractQName implements Comparable<QName> {
         return sb.append(getLocalName()).toString();
     }
 
+    @Override
+    public @NonNull QName bindTo(final QNameModule namespace) {
+        return module.equals(namespace) ? this : super.bindTo(namespace);
+    }
+
     /**
      * Returns a QName with the specified QNameModule and the same localname as this one.
      *
      * @param newModule New QNameModule to use
      * @return a QName with specified QNameModule and same local name as this one
+     * @deprecated Use {@link #bindTo(QNameModule)} instead.
      */
+    @Deprecated(forRemoval = true)
     public @NonNull QName withModule(final QNameModule newModule) {
-        return new QName(newModule, getLocalName());
+        return bindTo(newModule);
     }
 
     /**
index f6dce7058eec912078a6f798eac8ee237b44feda..72be15e04561209583d81a372294cc607b47690c 100644 (file)
@@ -59,10 +59,6 @@ public final class QualifiedQName extends AbstractQName implements Comparable<Qu
         return namespaceContext.findNamespaceForPrefix(prefix).map(this::bindTo);
     }
 
-    private QName bindTo(final QNameModule namespace) {
-        return new QName(namespace, getLocalName());
-    }
-
     @Override
     @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check")
     public QualifiedQName intern() {
index 5fb343815a4f5267fd218f1a1a5a56c5bb986618..6d0bc42b0efbf5bbff17d00929291c3bddfcf3e3 100644 (file)
@@ -48,10 +48,6 @@ public final class UnqualifiedQName extends AbstractQName implements Comparable<
         return of(in.readUTF());
     }
 
-    public QName bindTo(final QNameModule namespace) {
-        return new QName(namespace, getLocalName());
-    }
-
     @Override
     @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check")
     public UnqualifiedQName intern() {
index c0b7aafcb359b8932f72d3d8fbff9b3059462d77..9daf1b4698cb792fc4b813a21920bb8925acfb95 100644 (file)
@@ -87,9 +87,10 @@ public final class YangConstants {
      */
     public static final String YANG_XPATH_FUNCTIONS_PREFIX = "yang";
 
-    // Dummy template QNames. These are never leaked, but are used for efficient instantiation via QName#withModule()
-    private static final QName DUMMY_OPERATION_INPUT = QName.create("DUMMY", "input");
-    private static final QName DUMMY_OPERATION_OUTPUT = QName.create("DUMMY", "output");
+    // Dummy template UnqualifiedQName. These are never leaked, but are used for efficient instantiation via
+    // UnqualifiedQName#bindTo()
+    private static final UnqualifiedQName DUMMY_OPERATION_INPUT = UnqualifiedQName.of("input");
+    private static final UnqualifiedQName DUMMY_OPERATION_OUTPUT = UnqualifiedQName.of("output");
 
     private YangConstants() {
         // Hidden on purpose
@@ -104,7 +105,7 @@ public final class YangConstants {
      * @throws NullPointerException if {@code module} is null
      */
     public static QName operationInputQName(final QNameModule module) {
-        return DUMMY_OPERATION_INPUT.withModule(module);
+        return DUMMY_OPERATION_INPUT.bindTo(module);
     }
 
     /**
@@ -116,6 +117,6 @@ public final class YangConstants {
      * @throws NullPointerException if {@code module} is null
      */
     public static QName operationOutputQName(final QNameModule module) {
-        return DUMMY_OPERATION_OUTPUT.withModule(module);
+        return DUMMY_OPERATION_OUTPUT.bindTo(module);
     }
 }
index fbdd5784a2ef63709c9a25f078f1269c29872d59..3c514691c3d4a841e6c41c0e5fcceb9fb4ba7178 100644 (file)
@@ -71,7 +71,7 @@ public final class KeyStatementSupport
         for (final SchemaNodeIdentifier arg : ctx.coerceStatementArgument()) {
             final QName qname = arg.getLastComponent();
             if (!targetModule.equals(qname.getModule())) {
-                final QName newQname = qname.withModule(targetModule).intern();
+                final QName newQname = qname.bindTo(targetModule).intern();
                 builder.add(SchemaNodeIdentifier.SAME.createChild(newQname));
                 replaced = true;
             } else {
index d84c005561fcec13cc3292d2d8ce0f55abed74c3..7e1a00e8b9486a6bcf9630d77be5da0e8976a0e8 100644 (file)
@@ -311,7 +311,7 @@ abstract class AbstractTypeStatementSupport
         final QName parentQName = parent.getLastComponent();
         checkArgument(parentQName != null, "Path %s has an empty parent", path);
 
-        final QName qname = path.getLastComponent().withModule(parentQName.getModule()).intern();
+        final QName qname = path.getLastComponent().bindTo(parentQName.getModule()).intern();
         return parent.createChild(qname);
     }
 }
\ No newline at end of file
index 2bcb7613f7ddd595814fc9652a6f4e442b4d0ee8..2a3f3b1d2f8f1657dda4c6f9823ff26b66da21c0 100644 (file)
@@ -33,6 +33,6 @@ public abstract class AbstractQNameStatementSupport<D extends DeclaredStatement<
 
     @Override
     public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
-        return ctx.getStatementArgument().withModule(targetModule).intern();
+        return ctx.getStatementArgument().bindTo(targetModule).intern();
     }
 }