}
@Override
- public Object invoke(final Object proxy, final Method method, final Object [] args) throws NoSuchMethodError {
+ public Object invoke(final Object proxy, final Method method, final Object [] args) throws Throwable {
switch (method.getName()) {
case "equals":
if (args.length == 1) {
break;
}
+ if (method.isDefault()) {
+ return InvocationHandler.invokeDefault(proxy, method, args);
+ }
throw new NoSuchMethodError("Method " + method.toString() + "is unsupported.");
}
}
}
@Override
- public Object invoke(final Object proxy, final Method method, final Object[] args) throws NoSuchMethodError {
+ public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
if (method.getName().equals("invoke") && args.length == 2) {
final InstanceIdentifier<?> path = (InstanceIdentifier<?>) requireNonNull(args[0]);
checkState(nodes.contains(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, path)),
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultActionRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
import org.opendaylight.mdsal.binding.model.api.Type;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
* Generator corresponding to a {@code action} statement.
*/
final class ActionGenerator extends CompositeSchemaTreeGenerator<ActionEffectiveStatement, ActionRuntimeType> {
+ private static final JavaTypeName FUNCTIONAL_INTERFACE_ANNOTATION = JavaTypeName.create(FunctionalInterface.class);
+
ActionGenerator(final ActionEffectiveStatement statement, final AbstractCompositeGenerator<?, ?> parent) {
super(statement, parent);
}
GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
builder.addImplementsType(implementedType(builderFactory));
+ builder.addAnnotation(FUNCTIONAL_INTERFACE_ANNOTATION);
+ defaultImplementedInterace(builder);
final ModuleGenerator module = currentModule();
module.addQNameConstant(builder, statement().argument());
*/
package org.opendaylight.yangtools.yang.binding;
-import com.google.common.annotations.Beta;
import com.google.common.util.concurrent.ListenableFuture;
import edu.umd.cs.findbugs.annotations.CheckReturnValue;
import org.eclipse.jdt.annotation.NonNull;
*
* @author Robert Varga
*/
-@Beta
-@FunctionalInterface
-public interface Action<P extends InstanceIdentifier<?>, I extends RpcInput, O extends RpcOutput> {
+public non-sealed interface Action<P extends InstanceIdentifier<?>, I extends RpcInput, O extends RpcOutput>
+ extends BindingContract<Action<P, I, O>> {
/**
* Invoke the action.
*
*/
@Beta
// FIXME: evaluate integrating with BindingObject
-public sealed interface BindingContract<T extends BindingContract<T>> permits BaseIdentity, DataContainer, YangFeature {
+public sealed interface BindingContract<T extends BindingContract<T>>
+ permits Action, BaseIdentity, DataContainer, YangFeature {
/**
* Return the interface implemented by this object. This method differs from {@link Object#getClass()} in that it
* returns the interface contract, not a concrete implementation class.
*/
package org.opendaylight.yangtools.yang.binding;
-import com.google.common.annotations.Beta;
import com.google.common.util.concurrent.ListenableFuture;
import edu.umd.cs.findbugs.annotations.CheckReturnValue;
import org.opendaylight.yangtools.yang.common.RpcResult;
*
* @author Robert Varga
*/
-@Beta
-@FunctionalInterface
public interface KeyedListAction<K extends Identifier<T>, T extends DataObject & Identifiable<K>,
I extends RpcInput, O extends RpcOutput> extends Action<KeyedInstanceIdentifier<T, K>, I, O> {
@Override