Reduce ObjectRegistration use 61/109261/2
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Dec 2023 17:06:03 +0000 (18:06 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Dec 2023 18:09:58 +0000 (19:09 +0100)
We have a few more services which are exposing ObjectRegistration from
APIs for no particularly good reason.

Switch them to use Registration instead, which allows us to reduce
adaptation in some cases.

JIRA: MDSAL-843
Change-Id: I9c88288cd4d57b9fb2fc780d9017fbb3eb5dbd94
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 files changed:
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java
binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionProviderService.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java
dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/RegularYangModuleInfoRegistry.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMActionProviderService.java

index a818c833e74809dc65931a1b8113a71483ad2739..7a1ee8cb117ab7276d9d8dfce26dee6e350c12b4 100644 (file)
@@ -7,12 +7,11 @@
  */
 package org.opendaylight.mdsal.binding.api;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableSet;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.Action;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -22,10 +21,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * and implementations can be invoked  dynamically at runtime, via {@link ActionService}. Implementations registered
  * with this interface may throw {@link IllegalArgumentException}s when they encounter inconsistent input data and
  * {@link IllegalStateException} in they are unable to service the request.
- *
- * @author Robert Varga
  */
-@Beta
 public interface ActionProviderService extends BindingService {
     /**
      * Register an implementation of an action, potentially constrained to a set of nodes.
@@ -35,24 +31,24 @@ public interface ActionProviderService extends BindingService {
      * @param datastore {@link LogicalDatastoreType} on which the implementation operates
      * @param validNodes Set of nodes this implementation is constrained to, empty if this implementation can handle
      *                   any target node.
-     * @return An {@link ObjectRegistration}
+     * @return A {@link Registration}
      * @throws NullPointerException if any of the arguments is null
      * @throws IllegalArgumentException if any of the {@code validNodes} does not match {@code datastore}
      * @throws UnsupportedOperationException if this service cannot handle requested datastore
      */
-    <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
-        @NonNull ObjectRegistration<S> registerImplementation(@NonNull ActionSpec<A, P> spec, @NonNull S implementation,
+    <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+        @NonNull Registration registerImplementation(@NonNull ActionSpec<A, P> spec, @NonNull A implementation,
             @NonNull LogicalDatastoreType datastore, @NonNull Set<? extends InstanceIdentifier<P>> validNodes);
 
-    default <P extends DataObject, T extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends T>
-        @NonNull ObjectRegistration<S> registerImplementation(final @NonNull ActionSpec<T, P> spec,
-            final @NonNull S implementation, final @NonNull LogicalDatastoreType datastore) {
+    default <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+        @NonNull Registration registerImplementation(final @NonNull ActionSpec<A, P> spec,
+            final @NonNull A implementation, final @NonNull LogicalDatastoreType datastore) {
         return registerImplementation(spec, implementation, datastore, ImmutableSet.of());
     }
 
-    default <P extends DataObject, T extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends T>
-        @NonNull ObjectRegistration<S> registerImplementation(final @NonNull ActionSpec<T, P> spec,
-            final @NonNull S implementation) {
+    default <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+            @NonNull Registration registerImplementation(final @NonNull ActionSpec<A, P> spec,
+                final @NonNull A implementation) {
         return registerImplementation(spec, implementation, LogicalDatastoreType.OPERATIONAL);
     }
 }
index 778f94217970eb9d6c38fe26367edb8b5867cda0..9ee19f7b71e24bf28c83e36e485f0e76641f7452 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.mdsal.binding.api;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableSet;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -20,10 +19,7 @@ import org.opendaylight.yangtools.yang.binding.RpcInput;
 /**
  * Provides access to registered {@code action} implementations. Each action is defined in a YANG model,
  * and implementations are added dynamically at runtime, via {@link ActionProviderService}.
- *
- * @author Robert Varga
  */
-@Beta
 @NonNullByDefault
 public interface ActionService extends BindingService {
     /**
index 811ed33bfc6692126c0de15cd088fbdbbfd087a3..f806842fb50a0e680efeac971ba282080fde04b7 100644 (file)
@@ -8,26 +8,21 @@
 package org.opendaylight.mdsal.binding.api;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 /**
- * Commit Cohort registry.
- *
- * <p>
- * See {@link DataTreeCommitCohort} for more details.
- *
- * @author Tony Tkacik &lt;ttkacik@cisco.com&gt;
+ * Commit Cohort registry. See {@link DataTreeCommitCohort} for more details.
  */
 public interface DataTreeCommitCohortRegistry {
     /**
-     * Register commit cohort which will participate in three-phase commit protocols of write
-     * transaction in data broker associated with this instance of extension.
+     * Register commit cohort which will participate in three-phase commit protocols of write transaction in data broker
+     * associated with this instance of extension.
      *
      * @param subtree Subtree path on which commit cohort operates.
      * @param cohort Commit cohort
-     * @return Registaration object for DOM Data Three Commit cohort.
+     * @return Registration object for DOM Data Three Commit cohort.
      */
-    <D extends DataObject, T extends DataTreeCommitCohort<D>> @NonNull ObjectRegistration<T> registerCommitCohort(
-            @NonNull DataTreeIdentifier<D> subtree, @NonNull T cohort);
+    <D extends DataObject> @NonNull Registration registerCommitCohort(@NonNull DataTreeIdentifier<D> subtree,
+        @NonNull DataTreeCommitCohort<D> cohort);
 }
index 04c5a43345d2e9ed85099b226733fdbcd9678aa1..a3ad6568c0eee1351db8701c92f71918d04094c9 100644 (file)
@@ -29,8 +29,7 @@ import org.opendaylight.mdsal.dom.api.DOMActionResult;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMService;
 import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.Action;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -75,8 +74,8 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
     }
 
     @Override
-    public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
-            ObjectRegistration<S> registerImplementation(final ActionSpec<A, P> spec, final S implementation,
+    public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+            Registration registerImplementation(final ActionSpec<A, P> spec, final A implementation,
                 final LogicalDatastoreType datastore, final Set<? extends InstanceIdentifier<P>> validNodes) {
         final CurrentAdapterSerializer serializer = currentSerializer();
         final Absolute actionPath = serializer.getActionPath(spec);
@@ -90,14 +89,7 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
                     .collect(Collectors.toUnmodifiableSet()));
 
 
-        final ObjectRegistration<?> reg = getDelegate().registerActionImplementation(impl, instance);
-
-        return new AbstractObjectRegistration<>(implementation) {
-            @Override
-            protected void removeRegistration() {
-                reg.close();
-            }
-        };
+        return getDelegate().registerActionImplementation(impl, instance);
     }
 
     private static final class Impl implements DOMActionImplementation {
index 16a9d638d4f179e2b6abb2df6cc069782d10177c..c31e30463fadee3ec271da875593afeb4ff505c7 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeCommitCohort;
 import org.opendaylight.mdsal.binding.api.DataTreeCommitCohortRegistry;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
@@ -23,23 +23,12 @@ final class BindingDOMDataTreeCommitCohortRegistryAdapter
     }
 
     @Override
-    public <D extends DataObject, T extends DataTreeCommitCohort<D>> ObjectRegistration<T> registerCommitCohort(
-            final DataTreeIdentifier<D> subtree, final T cohort) {
+    public <D extends DataObject> Registration registerCommitCohort(final DataTreeIdentifier<D> subtree,
+            final DataTreeCommitCohort<D> cohort) {
         final var target = subtree.path().getTargetType();
         final var adapter = new BindingDOMDataTreeCommitCohortAdapter<>(adapterContext(), cohort,
             Augmentation.class.isAssignableFrom(target) ? target : null);
         final var domPath = currentSerializer().toDOMDataTreeIdentifier(subtree);
-        final var domReg = getDelegate().registerCommitCohort(domPath, adapter);
-        return new ObjectRegistration<>() {
-            @Override
-            public T getInstance() {
-                return cohort;
-            }
-
-            @Override
-            public void close() {
-                domReg.close();
-            }
-        };
+        return getDelegate().registerCommitCohort(domPath, adapter);
     }
 }
index c26553fb1209058461044ef97fb1832b1fe7a144..9ca49caabde26d0b254d63d6cec1a4dce5d7f715 100644 (file)
@@ -12,7 +12,7 @@ import java.util.Set;
 import org.opendaylight.mdsal.binding.api.ActionProviderService;
 import org.opendaylight.mdsal.binding.api.ActionSpec;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.Action;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -37,9 +37,9 @@ public final class OSGiActionProviderService extends AbstractAdaptedService<Acti
     }
 
     @Override
-    public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
-        ObjectRegistration<S> registerImplementation(final ActionSpec<A, P> spec, final S implementation,
-            final LogicalDatastoreType datastore, final Set<? extends InstanceIdentifier<P>> validNodes) {
+    public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+            Registration registerImplementation(final ActionSpec<A, P> spec, final A implementation,
+                final LogicalDatastoreType datastore, final Set<? extends InstanceIdentifier<P>> validNodes) {
         return delegate.registerImplementation(spec, implementation, datastore, validNodes);
     }
 }
index bb76474729e690e9f7c3a9c28f56e50e2b86400d..02824349d08bc6b83ce8f3a4c3ace68e8ef378da 100644 (file)
@@ -7,15 +7,15 @@
  */
 package org.opendaylight.mdsal.binding.dom.adapter;
 
-import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 
 import com.google.common.util.concurrent.MoreExecutors;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.DataTreeCommitCohort;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.dom.adapter.test.util.BindingBrokerTestFactory;
@@ -25,7 +25,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.te
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
+@ExtendWith(MockitoExtension.class)
 public class BindingDOMDataTreeCommitCohortRegistryAdapterTest {
+    @Mock
+    private DOMDataTreeCommitCohortRegistry cohortRegistry;
+    @Mock
+    private Registration cohortRegistration;
+    @Mock
+    private DataTreeCommitCohort<Top> dataTreeCommitCohort;
+
     @Test
     void basicTest() {
         final var bindingBrokerTestFactory = new BindingBrokerTestFactory();
@@ -33,8 +41,6 @@ public class BindingDOMDataTreeCommitCohortRegistryAdapterTest {
         final var bindingTestContext = bindingBrokerTestFactory.getTestContext();
         bindingTestContext.start();
 
-        final var cohortRegistry = mock(DOMDataTreeCommitCohortRegistry.class);
-        final var cohortRegistration = mock(Registration.class);
         doReturn(cohortRegistration).when(cohortRegistry).registerCommitCohort(any(), any());
         doNothing().when(cohortRegistration).close();
         final var registryAdapter = new BindingDOMDataTreeCommitCohortRegistryAdapter(bindingTestContext.getCodec(),
@@ -42,10 +48,8 @@ public class BindingDOMDataTreeCommitCohortRegistryAdapterTest {
 
         final var dataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
                 InstanceIdentifier.create(Top.class));
-        final DataTreeCommitCohort<Top> dataTreeCommitCohort = mock(DataTreeCommitCohort.class);
-        try (var objectRegistration = registryAdapter.registerCommitCohort(dataTreeIdentifier, dataTreeCommitCohort)) {
-            assertSame(dataTreeCommitCohort, objectRegistration.getInstance());
+        try (var reg = registryAdapter.registerCommitCohort(dataTreeIdentifier, dataTreeCommitCohort)) {
+            // Nothing else
         }
-        verify(cohortRegistration).close();
     }
 }
\ No newline at end of file
index 458a7bc141e70afa095acfb118180c701627267f..ab655c878286b1d785a09d6989594e6db370dcbe 100644 (file)
@@ -29,9 +29,8 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
 import org.opendaylight.yangtools.concepts.Mutable;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataRoot;
 import org.opendaylight.yangtools.yang.binding.YangFeature;
@@ -113,9 +112,8 @@ public final class ModuleInfoSnapshotResolver implements Mutable {
         return ctxResolver.registerSupportedFeatures(BindingReflections.getQNameModule(module), features);
     }
 
-    public synchronized List<ObjectRegistration<YangModuleInfo>> registerModuleInfos(
-            final Iterable<? extends YangModuleInfo> moduleInfos) {
-        final var ret = new ArrayList<ObjectRegistration<YangModuleInfo>>();
+    public synchronized List<Registration> registerModuleInfos(final Iterable<? extends YangModuleInfo> moduleInfos) {
+        final var ret = new ArrayList<Registration>();
         for (var moduleInfo : moduleInfos) {
             ret.add(register(requireNonNull(moduleInfo)));
         }
@@ -123,12 +121,12 @@ public final class ModuleInfoSnapshotResolver implements Mutable {
     }
 
     @Holding("this")
-    private ObjectRegistration<YangModuleInfo> register(final @NonNull YangModuleInfo moduleInfo) {
+    private Registration register(final @NonNull YangModuleInfo moduleInfo) {
         final var regInfos = flatDependencies(moduleInfo).stream()
             .map(this::registerModuleInfo)
             .collect(ImmutableList.toImmutableList());
 
-        return new AbstractObjectRegistration<>(moduleInfo) {
+        return new AbstractRegistration() {
             @Override
             protected void removeRegistration() {
                 unregister(regInfos);
index 11ac9ed1566dae3155bebe6439c3c395d16eebc4..254d0a8534c137faae91508601da663492029e17 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.mdsal.dom.api;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableSet;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 
 /**
  * A {@link DOMService} which allows registration of action implementations with a conceptual router. The client
  * counterpart of this service is {@link DOMActionService}.
  */
-@Beta
 @NonNullByDefault
 public interface DOMActionProviderService
         extends DOMService<DOMActionProviderService, DOMActionProviderService.Extension> {
@@ -33,24 +31,23 @@ public interface DOMActionProviderService
      *
      * @param implementation action implementation, must not be null
      * @param instances Set of supported operation identifiers. Must not be null, empty, or contain a null element.
-     * @return A {@link ObjectRegistration} object, guaranteed to be non-null.
+     * @return A {@link Registration} object, guaranteed to be non-null.
      * @throws NullPointerException if {@code implementation} or {@code instances} is null, or if {@code instances}
      *                              contains a null element.
      * @throws IllegalArgumentException if {@code instances} is empty
      */
-    <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(T implementation,
-        Set<DOMActionInstance> instances);
+    Registration registerActionImplementation(DOMActionImplementation implementation, Set<DOMActionInstance> instances);
 
     /**
      * Register an {@link DOMActionImplementation} object with this service, servicing specified action instance.
      *
      * @param implementation action implementation, must not be null
      * @param instance supported operation identifier. Must not be null.
-     * @return A {@link ObjectRegistration} object, guaranteed to be non-null.
+     * @return A {@link Registration} object, guaranteed to be non-null.
      * @throws NullPointerException if any argument is null
      */
-    default <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
-            final T implementation, final DOMActionInstance instance) {
+    default Registration registerActionImplementation(final DOMActionImplementation implementation,
+            final DOMActionInstance instance) {
         return registerActionImplementation(implementation, ImmutableSet.of(instance));
     }
 
@@ -59,13 +56,13 @@ public interface DOMActionProviderService
      *
      * @param implementation action implementation, must not be null
      * @param instances Set of supported operation identifiers. Must not be null, empty, or contain a null element.
-     * @return A {@link ObjectRegistration} object, guaranteed to be non-null.
+     * @return A {@link Registration} object, guaranteed to be non-null.
      * @throws NullPointerException if {@code implementation} or {@code instances} is null, or if {@code instances}
      *                              contains a null element.
      * @throws IllegalArgumentException if {@code instances} is empty
      */
-    default <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
-            final T implementation, final DOMActionInstance... instances) {
+    default Registration registerActionImplementation(final DOMActionImplementation implementation,
+            final DOMActionInstance... instances) {
         return registerActionImplementation(implementation, ImmutableSet.copyOf(instances));
     }
 }
index 6b5e956d4572c655cf139b3c94de94be912e66be..4b3190a1da014eaf5bee51433f2021707d9ff5d5 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.mdsal.dom.broker;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMultimap;
@@ -35,7 +37,6 @@ import org.opendaylight.mdsal.dom.api.DOMNotificationPublishDemandExtension;
 import org.opendaylight.mdsal.dom.api.DOMNotificationPublishDemandExtension.DemandListener;
 import org.opendaylight.mdsal.dom.api.DOMNotificationPublishService;
 import org.opendaylight.mdsal.dom.api.DOMNotificationService;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
 import org.opendaylight.yangtools.concepts.AbstractRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.util.ObjectRegistry;
@@ -72,9 +73,11 @@ public class DOMNotificationRouter implements AutoCloseable {
     }
 
     @VisibleForTesting
-    abstract static sealed class Reg extends AbstractObjectRegistration<DOMNotificationListener> {
+    abstract static sealed class Reg extends AbstractRegistration {
+        private final @NonNull DOMNotificationListener listener;
+
         Reg(final @NonNull DOMNotificationListener listener) {
-            super(listener);
+            this.listener = requireNonNull(listener);
         }
     }
 
@@ -323,7 +326,7 @@ public class DOMNotificationRouter implements AutoCloseable {
 
     private static void deliverEvents(final Reg reg, final ImmutableList<DOMNotificationRouterEvent> events) {
         if (reg.notClosed()) {
-            final var listener = reg.getInstance();
+            final var listener = reg.listener;
             for (var event : events) {
                 event.deliverTo(listener);
             }
index e740b37ba05db7f608834d497e4147d9bab3bffb..3b6587a80285a68bdfb22af085506872a8a4ce40 100644 (file)
@@ -56,9 +56,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcProviderService;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
 import org.opendaylight.yangtools.concepts.AbstractRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -87,10 +85,10 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
     private final @NonNull DOMRpcService rpcService = new RpcServiceFacade();
 
     @GuardedBy("this")
-    private ImmutableList<RegImpl> listeners = ImmutableList.of();
+    private ImmutableList<RpcAvailReg> listeners = ImmutableList.of();
 
     @GuardedBy("this")
-    private ImmutableList<ActionRegistration> actionListeners = ImmutableList.of();
+    private ImmutableList<ActionAvailReg> actionListeners = ImmutableList.of();
 
     private volatile DOMRpcRoutingTable routingTable = DOMRpcRoutingTable.EMPTY;
 
@@ -166,11 +164,11 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
         listenerNotifier.execute(() -> notifyActionChanged(newTable, implementation));
     }
 
-    private synchronized void removeListener(final RegImpl reg) {
+    private synchronized void removeListener(final RpcAvailReg reg) {
         listeners = ImmutableList.copyOf(Collections2.filter(listeners, input -> !reg.equals(input)));
     }
 
-    private synchronized void removeActionListener(final ActionRegistration reg) {
+    private synchronized void removeActionListener(final ActionAvailReg reg) {
         actionListeners = ImmutableList.copyOf(Collections2.filter(actionListeners, input -> !reg.equals(input)));
     }
 
@@ -248,13 +246,15 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
         return routingTable;
     }
 
-    private static final class RegImpl extends AbstractObjectRegistration<DOMRpcAvailabilityListener> {
+    private static final class RpcAvailReg extends AbstractRegistration {
+        private final DOMRpcAvailabilityListener listener;
+
         private Map<QName, Set<YangInstanceIdentifier>> prevRpcs;
         private DOMRpcRouter router;
 
-        RegImpl(final DOMRpcRouter router, final DOMRpcAvailabilityListener listener,
+        RpcAvailReg(final DOMRpcRouter router, final DOMRpcAvailabilityListener listener,
                 final Map<QName, Set<YangInstanceIdentifier>> rpcs) {
-            super(listener);
+            this.listener = requireNonNull(listener);
             this.router = requireNonNull(router);
             prevRpcs = requireNonNull(rpcs);
         }
@@ -271,17 +271,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
                 added.addAll(Collections2.transform(e.getValue(), i -> DOMRpcIdentifier.create(e.getKey(), i)));
             }
             if (!added.isEmpty()) {
-                getInstance().onRpcAvailable(added);
+                listener.onRpcAvailable(added);
             }
         }
 
         void addRpc(final DOMRpcRoutingTable newTable, final DOMRpcImplementation impl) {
-            final var l = getInstance();
-            if (!l.acceptsImplementation(impl)) {
+            if (!listener.acceptsImplementation(impl)) {
                 return;
             }
 
-            final Map<QName, Set<YangInstanceIdentifier>> rpcs = verifyNotNull(newTable.getOperations(l));
+            final Map<QName, Set<YangInstanceIdentifier>> rpcs = verifyNotNull(newTable.getOperations(listener));
             final MapDifference<QName, Set<YangInstanceIdentifier>> diff = Maps.difference(prevRpcs, rpcs);
 
             final List<DOMRpcIdentifier> added = new ArrayList<>();
@@ -296,17 +295,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
 
             prevRpcs = rpcs;
             if (!added.isEmpty()) {
-                l.onRpcAvailable(added);
+                listener.onRpcAvailable(added);
             }
         }
 
         void removeRpc(final DOMRpcRoutingTable newTable, final DOMRpcImplementation impl) {
-            final var l = getInstance();
-            if (!l.acceptsImplementation(impl)) {
+            if (!listener.acceptsImplementation(impl)) {
                 return;
             }
 
-            final Map<QName, Set<YangInstanceIdentifier>> rpcs = verifyNotNull(newTable.getOperations(l));
+            final Map<QName, Set<YangInstanceIdentifier>> rpcs = verifyNotNull(newTable.getOperations(listener));
             final MapDifference<QName, Set<YangInstanceIdentifier>> diff = Maps.difference(prevRpcs, rpcs);
 
             final List<DOMRpcIdentifier> removed = new ArrayList<>();
@@ -321,18 +319,20 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
 
             prevRpcs = rpcs;
             if (!removed.isEmpty()) {
-                l.onRpcUnavailable(removed);
+                listener.onRpcUnavailable(removed);
             }
         }
     }
 
-    private static final class ActionRegistration extends AbstractObjectRegistration<AvailabilityListener> {
+    private static final class ActionAvailReg extends AbstractRegistration {
+        private final AvailabilityListener listener;
+
         private Map<Absolute, Set<DOMDataTreeIdentifier>> prevActions;
         private DOMRpcRouter router;
 
-        ActionRegistration(final DOMRpcRouter router, final AvailabilityListener listener,
+        ActionAvailReg(final DOMRpcRouter router, final AvailabilityListener listener,
                 final Map<Absolute, Set<DOMDataTreeIdentifier>> actions) {
-            super(listener);
+            this.listener = requireNonNull(listener);
             this.router = requireNonNull(router);
             prevActions = requireNonNull(actions);
         }
@@ -349,17 +349,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
                 added.addAll(Collections2.transform(e.getValue(), i -> DOMActionInstance.of(e.getKey(), i)));
             }
             if (!added.isEmpty()) {
-                getInstance().onActionsChanged(ImmutableSet.of(), ImmutableSet.copyOf(added));
+                listener.onActionsChanged(ImmutableSet.of(), ImmutableSet.copyOf(added));
             }
         }
 
         void actionChanged(final DOMActionRoutingTable newTable, final DOMActionImplementation impl) {
-            final var l = getInstance();
-            if (!l.acceptsImplementation(impl)) {
+            if (!listener.acceptsImplementation(impl)) {
                 return;
             }
 
-            final Map<Absolute, Set<DOMDataTreeIdentifier>> actions = verifyNotNull(newTable.getOperations(l));
+            final Map<Absolute, Set<DOMDataTreeIdentifier>> actions = verifyNotNull(newTable.getOperations(listener));
             final MapDifference<Absolute, Set<DOMDataTreeIdentifier>> diff = Maps.difference(prevActions, actions);
 
             final Set<DOMActionInstance> removed = new HashSet<>();
@@ -385,7 +384,7 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
 
             prevActions = actions;
             if (!removed.isEmpty() || !added.isEmpty()) {
-                l.onActionsChanged(removed, added);
+                listener.onActionsChanged(removed, added);
             }
         }
     }
@@ -412,9 +411,9 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
         @Override
         public Registration registerAvailabilityListener(final AvailabilityListener listener) {
             synchronized (DOMRpcRouter.this) {
-                final var ret = new ActionRegistration(DOMRpcRouter.this, listener,
+                final var ret = new ActionAvailReg(DOMRpcRouter.this, listener,
                     actionRoutingTable.getOperations(listener));
-                actionListeners = ImmutableList.<ActionRegistration>builder()
+                actionListeners = ImmutableList.<ActionAvailReg>builder()
                     .addAll(actionListeners)
                     .add(ret)
                     .build();
@@ -428,8 +427,8 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
     @NonNullByDefault
     private final class ActionProviderServiceFacade implements DOMActionProviderService {
         @Override
-        public <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
-                final T implementation, final Set<DOMActionInstance> instances) {
+        public Registration registerActionImplementation(final DOMActionImplementation implementation,
+                final Set<DOMActionInstance> instances) {
             checkArgument(!instances.isEmpty(), "Instances must not be empty");
 
             synchronized (DOMRpcRouter.this) {
@@ -440,10 +439,10 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
                 listenerNotifier.execute(() -> notifyActionChanged(newTable, implementation));
             }
 
-            return new AbstractObjectRegistration<>(implementation) {
+            return new AbstractRegistration() {
                 @Override
                 protected void removeRegistration() {
-                    removeActionImplementation(getInstance(), instances);
+                    removeActionImplementation(implementation, instances);
                 }
             };
         }
@@ -464,8 +463,8 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
         @Override
         public Registration registerRpcListener(final DOMRpcAvailabilityListener listener) {
             synchronized (DOMRpcRouter.this) {
-                final var ret = new RegImpl(DOMRpcRouter.this, listener, routingTable.getOperations(listener));
-                listeners = ImmutableList.<RegImpl>builder().addAll(listeners).add(ret).build();
+                final var ret = new RpcAvailReg(DOMRpcRouter.this, listener, routingTable.getOperations(listener));
+                listeners = ImmutableList.<RpcAvailReg>builder().addAll(listeners).add(ret).build();
 
                 listenerNotifier.execute(ret::initialTable);
                 return ret;
index 8c0b167db6967ea29a3ba6dfdff9c7925fb2d874..d1e3717245148f2e062390afd1030c5da36068b9 100644 (file)
@@ -18,7 +18,6 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.runtime.spi.ModuleInfoSnapshotResolver;
 import org.opendaylight.yangtools.concepts.AbstractRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataRoot;
 import org.opendaylight.yangtools.yang.binding.YangFeatureProvider;
@@ -99,7 +98,7 @@ final class RegularYangModuleInfoRegistry extends YangModuleInfoRegistry {
             @Override
             protected void removeRegistration() {
                 featureRegs.forEach(Registration::close);
-                infoRegs.forEach(ObjectRegistration::close);
+                infoRegs.forEach(Registration::close);
             }
         };
     }
index 4272bb52a64ba9b978b5e828bbe9c52fecbe4176..2d532bd45ba61f9f60d3cd760aa8c894503c7cd7 100644 (file)
@@ -7,22 +7,20 @@
  */
 package org.opendaylight.mdsal.dom.spi;
 
-import com.google.common.annotations.Beta;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.mdsal.dom.api.DOMActionImplementation;
 import org.opendaylight.mdsal.dom.api.DOMActionInstance;
 import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 
-@Beta
 @NonNullByDefault
 public abstract class ForwardingDOMActionProviderService
         extends ForwardingDOMService<DOMActionProviderService, DOMActionProviderService.Extension>
         implements DOMActionProviderService {
     @Override
-    public <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
-            final T implementation, final Set<DOMActionInstance> instances) {
+    public Registration registerActionImplementation(final DOMActionImplementation implementation,
+            final Set<DOMActionInstance> instances) {
         return delegate().registerActionImplementation(implementation, instances);
     }
 }