Remove DOMMountPoint's EffectiveModelContext
[mdsal.git] / binding / mdsal-binding-spec-util / src / main / java / org / opendaylight / mdsal / binding / spec / reflect / AugmentationFieldGetter.java
index 37e47f0a0fb876bc9d671ed48a40e691ff78bc34..ad0c430d2ee76e123e50019d2edba14d51896dd3 100644 (file)
@@ -17,11 +17,13 @@ import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.Collections;
 import java.util.Map;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,19 +33,11 @@ abstract class AugmentationFieldGetter {
 
     private static final AugmentationFieldGetter DUMMY = new AugmentationFieldGetter() {
         @Override
-        protected Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(final Object input) {
+        Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(final Object input) {
             return Collections.emptyMap();
         }
     };
 
-    private static final AugmentationFieldGetter AUGMENTATION_HOLDER_GETTER = new AugmentationFieldGetter() {
-        @Override
-        @SuppressWarnings({"unchecked", "rawtypes"})
-        protected Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(final Object input) {
-            return (Map) ((AugmentationHolder<?>) input).augmentations();
-        }
-    };
-
     private static final LoadingCache<Class<?>, AugmentationFieldGetter> AUGMENTATION_GETTERS =
             CacheBuilder.newBuilder().weakKeys().build(new AugmentationGetterLoader());
 
@@ -53,12 +47,9 @@ abstract class AugmentationFieldGetter {
      * @param input Input Data object, from which augmentations should be extracted
      * @return Map of Augmentation class to augmentation
      */
-    protected abstract Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(Object input);
+    abstract Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(Object input);
 
-    public static AugmentationFieldGetter getGetter(final Class<? extends Object> clz) {
-        if (AugmentationHolder.class.isAssignableFrom(clz)) {
-            return AUGMENTATION_HOLDER_GETTER;
-        }
+    static AugmentationFieldGetter getGetter(final Class<? extends Object> clz) {
         return AUGMENTATION_GETTERS.getUnchecked(clz);
     }
 
@@ -70,9 +61,12 @@ abstract class AugmentationFieldGetter {
         public AugmentationFieldGetter load(final Class<?> key) throws IllegalAccessException {
             final Field field;
             try {
-                field = key.getDeclaredField(BindingMapping.AUGMENTATION_FIELD);
-                field.setAccessible(true);
-            } catch (NoSuchFieldException | SecurityException e) {
+                field = AccessController.doPrivileged((PrivilegedExceptionAction<Field>) () -> {
+                    final Field f = key.getDeclaredField(BindingMapping.AUGMENTATION_FIELD);
+                    f.setAccessible(true);
+                    return f;
+                });
+            } catch (PrivilegedActionException e) {
                 LOG.warn("Failed to acquire augmentation field {}, ignoring augmentations in class {}",
                     BindingMapping.AUGMENTATION_FIELD, key, e);
                 return DUMMY;
@@ -96,7 +90,7 @@ abstract class AugmentationFieldGetter {
 
         @Override
         @SuppressWarnings("checkstyle:illegalCatch")
-        protected Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(final Object input) {
+        Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAugmentations(final Object input) {
             try {
                 return (Map<Class<? extends Augmentation<?>>, Augmentation<?>>) fieldGetter.invokeExact(input);
             } catch (Throwable e) {