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>
private final @NonNull DOMRpcService delegate;
private final RpcInvocationStrategy strategy;
private final @NonNull Rpc<?, ?> facade;
private final @NonNull DOMRpcService delegate;
private final RpcInvocationStrategy strategy;
private final @NonNull Rpc<?, ?> facade;
- private final Method invokeMethod;
private final String name;
<T extends Rpc<?, ?>> RpcAdapter(final AdapterContext adapterContext, final DOMRpcService delegate,
private final String name;
<T extends Rpc<?, ?>> RpcAdapter(final AdapterContext adapterContext, final DOMRpcService delegate,
throw new IllegalStateException("Failed to find runtime type for " + type);
}
throw new IllegalStateException("Failed to find runtime type for " + type);
}
- try {
- invokeMethod = type.getMethod(Naming.RPC_INVOKE_NAME, RpcInput.class);
- } catch (NoSuchMethodException e) {
- throw new IllegalStateException("Failed to find invoke method in " + type, e);
- }
-
facade = type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class<?>[] { type }, this));
name = type.getName();
facade = type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class<?>[] { type }, this));
name = type.getName();
@Override
public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
@Override
public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
- if (invokeMethod.equals(method)) {
- return strategy.invoke((RpcInput) requireNonNull(args[0]));
- }
-
switch (method.getName()) {
switch (method.getName()) {
+ case Naming.RPC_INVOKE_NAME:
+ if (method.getParameterCount() == 1) {
+ return strategy.invoke((RpcInput) requireNonNull(args[0]));
+ }
+ break;
case "toString":
if (method.getReturnType().equals(String.class) && method.getParameterCount() == 0) {
return name + "$Adapter{delegate=" + delegate + "}";
case "toString":
if (method.getReturnType().equals(String.class) && method.getParameterCount() == 0) {
return name + "$Adapter{delegate=" + delegate + "}";
*/
package org.opendaylight.mdsal.binding.generator.impl.reactor;
*/
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.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;
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;
@Override
final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
final var builder = builderFactory.newGeneratedTypeBuilder(typeName());
@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);
builder.addAnnotation(FUNCTIONAL_INTERFACE_ANNOTATION);
defaultImplementedInterace(builder);
return builder.build();
}
return builder.build();
}
- abstract @NonNull ParameterizedType implementedType(TypeBuilderFactory builderFactory, GeneratedType input,
- GeneratedType output);
+ abstract void addImplementedType(TypeBuilderFactory builderFactory, GeneratedTypeBuilder builder,
+ GeneratedType input, GeneratedType output);
import java.util.List;
import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultActionRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
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;
+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.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.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.binding.contract.StatementNamespace;
import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
import org.opendaylight.yangtools.yang.binding.contract.StatementNamespace;
import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
- 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) {
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);
import java.util.List;
import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultRpcRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
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.model.ri.BindingTypes;
+import org.opendaylight.mdsal.binding.model.ri.Types;
import org.opendaylight.mdsal.binding.runtime.api.RpcRuntimeType;
import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
import org.opendaylight.mdsal.binding.runtime.api.RpcRuntimeType;
import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
+import org.opendaylight.yangtools.yang.binding.contract.Naming;
import org.opendaylight.yangtools.yang.binding.contract.StatementNamespace;
import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
import org.opendaylight.yangtools.yang.binding.contract.StatementNamespace;
import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
- 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));
+ builder.addMethod(Naming.RPC_INVOKE_NAME).setAbstract(true)
+ .addParameter(input, "input")
+ .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output)))
+ .addAnnotation(OVERRIDE_ANNOTATION);