Correct ActionSpec definition 83/99683/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Feb 2022 10:38:25 +0000 (11:38 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Feb 2022 11:50:06 +0000 (12:50 +0100)
ActionSpec's generics fail to account for KeyedListActions. Fix that
by making sure allow for KeyedInstanceIdentifiers as well as
InstanceIdentifiers.

JIRA: MDSAL-721
Change-Id: I520e23e0294c38c37c6a15dd4d7f05c937476357
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 7c8af4914727a5343d0dfa2034e1f1c818ce6e35)

binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionSpec.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionLookupTest.java

index a42c0725911f5495fd047b4bed5bbad7c702ea63..554fa5f4a8bebc070cfe1236ef7a455f237c1633 100644 (file)
@@ -38,7 +38,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdenti
  * @param <P> Action parent type
  */
 @Beta
-public final class ActionSpec<A extends Action<InstanceIdentifier<P>, ?, ?>, P extends DataObject>
+public final class ActionSpec<A extends Action<? extends InstanceIdentifier<P>, ?, ?>, P extends DataObject>
         implements Immutable {
     private final @NonNull InstanceIdentifier<P> path;
     private final @NonNull Class<A> type;
@@ -112,7 +112,8 @@ public final class ActionSpec<A extends Action<InstanceIdentifier<P>, ?, ?>, P e
             return castThis();
         }
 
-        public <A extends Action<InstanceIdentifier<P>, ?, ?>> @NonNull ActionSpec<A, P> build(final Class<A> type) {
+        public <A extends Action<? extends InstanceIdentifier<P>, ?, ?>> @NonNull ActionSpec<A, P> build(
+                final Class<A> type) {
             return new ActionSpec<>(type, pathBuilder.build());
         }
 
index 223995f25661b84691ccc22fa8ba753f91e67e7e..97840294c6eb599ebf1c901a4675f51d572cb178 100644 (file)
@@ -15,10 +15,13 @@ import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Cont;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Grpcont;
+import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Grplst;
+import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Lstio;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Nestedcont;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Othercont;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.Foo;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.grpcont.Bar;
+import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.Fooio;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.nested.Baz;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
@@ -38,5 +41,10 @@ public class ActionLookupTest {
         assertEquals(Absolute.of(Nestedcont.QNAME, Baz.QNAME, Bar.QNAME), codec.getActionPath(
             ActionSpec.builder(Nestedcont.class).withPathChild(Baz.class).build(
                 org.opendaylight.yang.gen.v1.urn.odl.actions.norev.nested.baz.Bar.class)));
+        assertEquals(Absolute.of(Lstio.QNAME, Fooio.QNAME), codec.getActionPath(
+            ActionSpec.builder(Lstio.class).build(Fooio.class)));
+        assertEquals(Absolute.of(Grplst.QNAME, Bar.QNAME), codec.getActionPath(
+            ActionSpec.builder(Grplst.class).build(
+                org.opendaylight.yang.gen.v1.urn.odl.actions.norev.grplst.Bar.class)));
     }
 }