Override Rpc/Action invoke method 42/109842/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Jan 2024 06:56:56 +0000 (07:56 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Jan 2024 17:40:28 +0000 (18:40 +0100)
Add a plain @Override method for Rpc/Action's invoke method, so that it
is manifested in the generated type.

JIRA: MDSAL-852
Change-Id: I7db7c9036bdb3051ae48a903b66df933fb338fae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 078d561c79e3fcf57b2bfd5d6b50c4502288781a)

binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractInvokableGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ActionGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcGenerator.java

index 55313f5bd3ec2fa1b335c86a55146c3448902a9f..a3851f9279d4bc3ec2101d01e5bb3d8bd879cb04 100644 (file)
@@ -7,10 +7,9 @@
  */
 package org.opendaylight.mdsal.binding.generator.impl.reactor;
 
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
-import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
+import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
 import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
@@ -39,9 +38,11 @@ abstract class AbstractInvokableGenerator<S extends SchemaTreeEffectiveStatement
     @Override
     final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
         final var builder = builderFactory.newGeneratedTypeBuilder(typeName());
-        builder.addImplementsType(implementedType(builderFactory,
-            getChild(this, InputEffectiveStatement.class).getOriginal().getGeneratedType(builderFactory),
-            getChild(this, OutputEffectiveStatement.class).getOriginal().getGeneratedType(builderFactory)));
+        final var inputType = getChild(this, InputEffectiveStatement.class).getOriginal()
+            .getGeneratedType(builderFactory);
+        final var outputType = getChild(this, OutputEffectiveStatement.class).getOriginal()
+            .getGeneratedType(builderFactory);
+        addImplementedType(builderFactory, builder, inputType, outputType);
         builder.addAnnotation(FUNCTIONAL_INTERFACE_ANNOTATION);
         defaultImplementedInterace(builder);
 
@@ -54,6 +55,6 @@ abstract class AbstractInvokableGenerator<S extends SchemaTreeEffectiveStatement
         return builder.build();
     }
 
-    abstract @NonNull ParameterizedType implementedType(TypeBuilderFactory builderFactory, GeneratedType input,
-        GeneratedType output);
+    abstract void addImplementedType(TypeBuilderFactory builderFactory, GeneratedTypeBuilder builder,
+        GeneratedType input, GeneratedType output);
 }
index e9da8319c775b02442e3777c51270123fd836ec3..d61d8d4745b2c222c5d9f43bf28800560e8f05e1 100644 (file)
@@ -10,11 +10,13 @@ package org.opendaylight.mdsal.binding.generator.impl.reactor;
 import java.util.List;
 import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultActionRuntimeType;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
-import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
 import org.opendaylight.mdsal.binding.model.api.Type;
+import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
+import org.opendaylight.mdsal.binding.model.ri.Types;
 import org.opendaylight.mdsal.binding.runtime.api.ActionRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
+import org.opendaylight.yangtools.yang.binding.contract.Naming;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
 
 /**
@@ -39,17 +41,29 @@ final class ActionGenerator extends AbstractInvokableGenerator<ActionEffectiveSt
     }
 
     @Override
-    ParameterizedType implementedType(final TypeBuilderFactory builderFactory, final GeneratedType input,
-            final GeneratedType output) {
+    void addImplementedType(final TypeBuilderFactory builderFactory, final GeneratedTypeBuilder builder,
+            final GeneratedType input, final GeneratedType output) {
         final var parent = getParent();
         final var parentType = Type.of(parent.typeName());
         if (parent instanceof ListGenerator list) {
             final var keyGen = list.keyGenerator();
             if (keyGen != null) {
-                return BindingTypes.keyedListAction(parentType, keyGen.getGeneratedType(builderFactory), input, output);
+                final var keyType = keyGen.getGeneratedType(builderFactory);
+                builder.addImplementsType(BindingTypes.keyedListAction(parentType, keyType, input, output));
+                builder.addMethod(Naming.RPC_INVOKE_NAME).setAbstract(true)
+                    .addParameter(BindingTypes.keyedInstanceIdentifier(parentType, keyType), "path")
+                    .addParameter(input, "input")
+                    .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output)))
+                    .addAnnotation(OVERRIDE_ANNOTATION);
+                return;
             }
         }
-        return BindingTypes.action(parentType, input, output);
+        builder.addImplementsType(BindingTypes.action(parentType, input, output));
+        builder.addMethod(Naming.RPC_INVOKE_NAME).setAbstract(true)
+            .addParameter(BindingTypes.instanceIdentifier(parentType), "path")
+            .addParameter(input, "input")
+            .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output)))
+            .addAnnotation(OVERRIDE_ANNOTATION);
     }
 
     @Override
index 67d1ac25b330203631c18be7cd34c1410da02cbd..489e3f1d8271fb842a3e592a72d3cf36ea95c16c 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.mdsal.binding.generator.impl.reactor;
 import java.util.List;
 import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultRpcRuntimeType;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
-import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
+import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
 import org.opendaylight.mdsal.binding.runtime.api.RpcRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
@@ -36,9 +36,9 @@ public final class RpcGenerator extends AbstractInvokableGenerator<RpcEffectiveS
     }
 
     @Override
-    ParameterizedType implementedType(final TypeBuilderFactory builderFactory, final GeneratedType input,
-            final GeneratedType output) {
-        return BindingTypes.rpc(input, output);
+    void addImplementedType(final TypeBuilderFactory builderFactory, final GeneratedTypeBuilder builder,
+            final GeneratedType input, final GeneratedType output) {
+        builder.addImplementsType(BindingTypes.rpc(input, output));
     }
 
     @Override