From: Martin Ciglan Date: Tue, 28 Feb 2017 09:51:32 +0000 (+0100) Subject: Bug 6856: Rpc definition should implicitly define input/ouput X-Git-Tag: release/boron-sr3~5 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=e54d13bf867f7f7ff392b5746f028a6743717417 Bug 6856: Rpc definition should implicitly define input/ouput - corresponding fix for MD-SAL - rely on yang model API only Change-Id: I7380b7d8366c4c18925da09a95a14f5309a8e9ef Signed-off-by: Martin Ciglan (cherry picked from commit cca0a276d2e55ccc92bd1c3e4e51bffb29d482c6) --- diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index 8ae66d0d0b..c485d01a87 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -100,6 +100,8 @@ 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.UnionTypeDefinition; @@ -512,7 +514,9 @@ public class BindingGeneratorImpl implements BindingGenerator { final ContainerSchemaNode input = rpc.getInput(); final ContainerSchemaNode output = rpc.getOutput(); - if (input != null) { + //in case of implicit RPC input (StatementSource.CONTEXT), + // stay compatible (no input argument generated) + if (input != null && isExplicitStatement(input)) { final GeneratedTypeBuilder inType = addRawInterfaceDefinition(basePackageName, input, rpcName); addImplementedInterfaceFromUses(input, inType); inType.addImplementsType(DATA_OBJECT); @@ -525,7 +529,9 @@ public class BindingGeneratorImpl implements BindingGenerator { } Type outTypeInstance = VOID; - if (output != null) { + //in case of implicit RPC output (StatementSource.CONTEXT), + //stay compatible (Future> return type generated) + if (output != null && isExplicitStatement(output)) { final GeneratedTypeBuilder outType = addRawInterfaceDefinition(basePackageName, output, rpcName); addImplementedInterfaceFromUses(output, outType); outType.addImplementsType(DATA_OBJECT); @@ -545,6 +551,11 @@ public class BindingGeneratorImpl implements BindingGenerator { genCtx.get(module).addTopLevelNodeType(interfaceBuilder); } + private static boolean isExplicitStatement(ContainerSchemaNode node) { + return node instanceof EffectiveStatement + && ((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION; + } + /** * Converts all notifications of the module to the list of * Type objects. In addition are to this list added containers