Always generate RPC input/output 55/69355/41
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 11 Mar 2018 16:19:05 +0000 (17:19 +0100)
committerTom Pantelis <tompantelis@gmail.com>
Wed, 23 May 2018 10:57:35 +0000 (10:57 +0000)
Do not suppress implicit input/output RPC statements, as they may
be augmented and the implementation should have a way to receive
those augmentations.

Change-Id: Ie7d1adde5732c65412c13c80e8b555a5626d34e0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapterTest.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java

index cb69ce70944612cff125b89709126b6fb5e998e5..c43a848f8038ed9c1ef5cad5dcf513c8ae6e85b5 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.dom.adapter.test.util.BindingTestContext;
 import org.opendaylight.mdsal.dom.api.DOMRpcProviderService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.OpendaylightTestRpcServiceService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.RockTheHouseInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.RockTheHouseOutput;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public class BindingDOMRpcProviderServiceAdapterTest {
@@ -43,7 +44,7 @@ public class BindingDOMRpcProviderServiceAdapterTest {
     private class TestImpl implements OpendaylightTestRpcServiceService {
 
         @Override
-        public Future<RpcResult<Void>> rockTheHouse(RockTheHouseInput input) {
+        public Future<RpcResult<RockTheHouseOutput>> rockTheHouse(final RockTheHouseInput input) {
             return null;
         }
     }
index 6fb0fdcbd9bc6afd7f3b7a41fc63de7a4aa133ed..ada941f0ea32e7695d27575a5fc5752ae3c9b845 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.generator.impl;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.computeDefaultSUID;
 import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.packageNameForAugmentedGeneratedType;
@@ -21,7 +22,6 @@ import static org.opendaylight.mdsal.binding.model.util.BindingTypes.NOTIFICATIO
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.augmentable;
 import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN;
 import static org.opendaylight.mdsal.binding.model.util.Types.FUTURE;
-import static org.opendaylight.mdsal.binding.model.util.Types.VOID;
 import static org.opendaylight.mdsal.binding.model.util.Types.typeForClass;
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode;
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findNodeInSchemaContext;
@@ -96,8 +96,6 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
@@ -424,42 +422,21 @@ abstract class AbstractTypeGenerator {
                 final String rpcName = BindingMapping.getClassName(rpc.getQName());
                 final String rpcMethodName = BindingMapping.getPropertyName(rpcName);
                 final MethodSignatureBuilder method = interfaceBuilder.addMethod(rpcMethodName);
-                final ContainerSchemaNode input = rpc.getInput();
-                final ContainerSchemaNode output = rpc.getOutput();
 
                 // Do not refer to annotation class, as it may not be available at runtime
                 method.addAnnotation("javax.annotation", "CheckReturnValue");
-
-                //in case of implicit RPC input (StatementSource.CONTEXT),
-                // stay compatible (no input argument generated)
-                if (input != null && isExplicitStatement(input)) {
-                    final Type inTypeInstance = createRpcContainer(context, rpcName, rpc, input);
-                    method.addParameter(inTypeInstance, "input");
-                }
-
-                final Type outTypeInstance;
-                //in case of implicit RPC output (StatementSource.CONTEXT),
-                //stay compatible (Future<RpcResult<Void>> return type generated)
-                if (output != null && isExplicitStatement(output)) {
-                    outTypeInstance = createRpcContainer(context, rpcName, rpc, output);
-                } else {
-                    outTypeInstance = VOID;
-                }
-
-                final Type rpcRes = Types.parameterizedTypeFor(Types.typeForClass(RpcResult.class), outTypeInstance);
                 addComment(method, rpc);
-                method.setReturnType(Types.parameterizedTypeFor(FUTURE, rpcRes));
+                method.addParameter(
+                    createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getInput())), "input");
+                method.setReturnType(Types.parameterizedTypeFor(FUTURE,
+                    Types.parameterizedTypeFor(Types.typeForClass(RpcResult.class),
+                    createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getOutput())))));
             }
         }
 
         context.addTopLevelNodeType(interfaceBuilder);
     }
 
-    private static boolean isExplicitStatement(final ContainerSchemaNode node) {
-        return node instanceof EffectiveStatement
-                && ((EffectiveStatement<?, ?>) node).getDeclared().getStatementSource() == StatementSource.DECLARATION;
-    }
-
     private Type createRpcContainer(final ModuleContext context, final String rpcName, final RpcDefinition rpc,
             final ContainerSchemaNode schema) {
         processUsesAugments(schema, context);