Move BindingReflections.findAugmentationTarget()
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / DataContainerCodecContext.java
index 2c37161b9a6aaba157418b57ea39206214978517..11051c7db767252be740b9ceec8638dc69fa946e 100644 (file)
@@ -38,8 +38,8 @@ import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeTypeContainer;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yangtools.util.ClassLoaderUtils;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.BindingObject;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
@@ -378,8 +378,7 @@ abstract sealed class DataContainerCodecContext<D extends DataObject, T extends
             return false;
         }
         if (Augmentation.class.isAssignableFrom(potential)
-                && !BindingReflections.findAugmentationTarget(potential).equals(
-                        BindingReflections.findAugmentationTarget(target))) {
+            && !findAugmentationTarget(potential).equals(findAugmentationTarget(target))) {
             return false;
         }
         for (Method potentialMethod : potential.getMethods()) {
@@ -402,4 +401,18 @@ abstract sealed class DataContainerCodecContext<D extends DataObject, T extends
         }
         return true;
     }
+
+    /**
+     * Find augmentation target class from concrete Augmentation class. This method uses first generic argument of
+     * implemented {@link Augmentation} interface.
+     *
+     * @param augmentation {@link Augmentation} subclass for which we want to determine augmentation target.
+     * @return Augmentation target - class which augmentation provides additional extensions.
+     */
+    static final Class<? extends Augmentable<?>> findAugmentationTarget(
+            final Class<? extends Augmentation<?>> augmentation) {
+        final Optional<Class<Augmentable<?>>> opt = ClassLoaderUtils.findFirstGenericArgument(augmentation,
+            Augmentation.class);
+        return opt.orElse(null);
+    }
 }