From 0b507cd93edf2c0339692f3d3c6dc14abcdd738d Mon Sep 17 00:00:00 2001 From: Dana Kutenicsova Date: Thu, 13 Oct 2016 18:34:52 +0200 Subject: [PATCH] Removed sonar warnings. Change-Id: I2dbe2018cc1d2672f98fd3aea9e01c7d851eacc8 Signed-off-by: Dana Kutenicsova --- .../yangtools/yang/binding/BaseIdentity.java | 4 +- .../yang/binding/BindingMapping.java | 3 +- .../binding/BindingStreamEventWriter.java | 31 ++- .../yang/binding/InstanceIdentifier.java | 7 +- .../yang/binding/KeyedInstanceIdentifier.java | 2 +- .../binding/util/AugmentationFieldGetter.java | 6 +- .../yang/binding/util/BindingReflections.java | 201 ++++++++---------- .../binding/util/DataObjectReadingUtil.java | 37 ++-- .../util/NotificationListenerInvoker.java | 51 ++--- 9 files changed, 161 insertions(+), 181 deletions(-) diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BaseIdentity.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BaseIdentity.java index 9f55b64d52..fec92f2497 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BaseIdentity.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BaseIdentity.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.binding; /** * Base Identity - * + * */ public abstract class BaseIdentity { - public final static BaseIdentity INSTANCE = new BaseIdentity() { + public static final BaseIdentity INSTANCE = new BaseIdentity() { }; protected BaseIdentity() { diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingMapping.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingMapping.java index 5a73217066..72f63cc060 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingMapping.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingMapping.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.binding; import static com.google.common.base.Preconditions.checkArgument; - import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableSet; @@ -162,7 +161,7 @@ public final class BindingMapping { public static String getGetterSuffix(final QName name) { checkArgument(name != null, "Name should not be null."); final String candidate = toFirstUpper(toCamelCase(name.getLocalName())); - return ("Class".equals(candidate) ? "XmlClass" : candidate); + return "Class".equals(candidate) ? "XmlClass" : candidate; } public static String getPropertyName(final String yangIdentifier) { diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingStreamEventWriter.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingStreamEventWriter.java index 8215f16421..cd943e9400 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingStreamEventWriter.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingStreamEventWriter.java @@ -123,7 +123,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void leafNode(String localName, Object value) throws IOException, IllegalArgumentException; + void leafNode(String localName, Object value) throws IOException; /** * @@ -149,7 +149,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startLeafSet(String localName, int childSizeHint) throws IOException, IllegalArgumentException; + void startLeafSet(String localName, int childSizeHint) throws IOException; /** * @@ -175,7 +175,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startOrderedLeafSet(String localName, int childSizeHint) throws IOException, IllegalArgumentException; + void startOrderedLeafSet(String localName, int childSizeHint) throws IOException; /** * Emits a leaf set entry node @@ -188,7 +188,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * If node was emitted outside leaf set node. * @throws IOException if an underlying IO error occurs */ - void leafSetEntryNode(Object value) throws IOException, IllegalArgumentException; + void leafSetEntryNode(Object value) throws IOException; /** * @@ -225,7 +225,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startContainerNode(Class container, int childSizeHint) throws IOException, IllegalArgumentException; + void startContainerNode(Class container, int childSizeHint) throws IOException; /** * @@ -252,7 +252,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startUnkeyedList(Class localName, int childSizeHint) throws IOException, IllegalArgumentException; + void startUnkeyedList(Class localName, int childSizeHint) throws IOException; /** * Emits start of new unkeyed list item. @@ -283,7 +283,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * If node was emitted outside unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startUnkeyedListItem(int childSizeHint) throws IOException, IllegalStateException; + void startUnkeyedListItem(int childSizeHint) throws IOException; /** * @@ -308,7 +308,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * @throws IOException if an underlying IO error occurs */ > void startMapNode(Class mapEntryType, int childSizeHint) - throws IOException, IllegalArgumentException; + throws IOException; /** * @@ -333,7 +333,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * @throws IOException if an underlying IO error occurs */ > void startOrderedMapNode(Class mapEntryType, int childSizeHint) - throws IOException, IllegalArgumentException; + throws IOException; /** * @@ -367,7 +367,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * If node was emitted outside map entry node. * @throws IOException if an underlying IO error occurs */ - void startMapEntryNode(Identifier keyValues, int childSizeHint) throws IOException, IllegalArgumentException; + void startMapEntryNode(Identifier keyValues, int childSizeHint) throws IOException; /** * Emits start of choice node. @@ -389,7 +389,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void startChoiceNode(Class choice, int childSizeHint) throws IOException, IllegalArgumentException; + void startChoiceNode(Class choice, int childSizeHint) throws IOException; /** * @@ -411,7 +411,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * @throws IllegalArgumentException * @throws IOException if an underlying IO error occurs */ - void startCase(Class caze, int childSizeHint) throws IOException, IllegalArgumentException; + void startCase(Class caze, int childSizeHint) throws IOException; /** * Emits start of augmentation node. @@ -440,7 +440,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * If augmentation is invalid in current context. * @throws IOException if an underlying IO error occurs */ - void startAugmentationNode(Class> augmentationType) throws IOException, IllegalArgumentException; + void startAugmentationNode(Class> augmentationType) throws IOException; /** * Emits anyxml node event. @@ -453,7 +453,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * choice unkeyed list node. * @throws IOException if an underlying IO error occurs */ - void anyxmlNode(String name, Object value) throws IOException, IllegalArgumentException; + void anyxmlNode(String name, Object value) throws IOException; /** * Emits end event for node. @@ -461,8 +461,7 @@ public interface BindingStreamEventWriter extends Closeable, Flushable { * @throws IllegalStateException If there is no open node. * @throws IOException if an underlying IO error occurs */ - void endNode() throws IOException, IllegalStateException; - + void endNode() throws IOException; @Override void flush() throws IOException; diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java index 240b5036e4..cde6f7f1d8 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java @@ -209,7 +209,8 @@ public class InstanceIdentifier implements Path ret = (InstanceIdentifier) internalCreate(Iterables.limit(pathArguments, i)); + final InstanceIdentifier ret = (InstanceIdentifier) internalCreate( + Iterables.limit(pathArguments, i)); return ret; } @@ -334,7 +335,7 @@ public class InstanceIdentifier implements Path builder() { - return new InstanceIdentifierBuilderImpl(new Item(targetType), pathArguments, hash, isWildcarded()); + return new InstanceIdentifierBuilderImpl<>(new Item(targetType), pathArguments, hash, isWildcarded()); } private InstanceIdentifier childIdentifier(final PathArgument arg) { @@ -532,7 +533,7 @@ public class InstanceIdentifier implements Path getType(); } - private static abstract class AbstractPathArgument implements PathArgument, Serializable { + private abstract static class AbstractPathArgument implements PathArgument, Serializable { private static final long serialVersionUID = 1L; private final Class type; diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/KeyedInstanceIdentifier.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/KeyedInstanceIdentifier.java index a69b98879f..2710ee0738 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/KeyedInstanceIdentifier.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/KeyedInstanceIdentifier.java @@ -35,7 +35,7 @@ public class KeyedInstanceIdentifier & DataObject, K e @Override public final InstanceIdentifierBuilder builder() { - return new InstanceIdentifierBuilderImpl(new InstanceIdentifier.IdentifiableItem(getTargetType(), key), pathArguments, hashCode(), isWildcarded()); + return new InstanceIdentifierBuilderImpl<>(new InstanceIdentifier.IdentifiableItem(getTargetType(), key), pathArguments, hashCode(), isWildcarded()); } @Override diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/AugmentationFieldGetter.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/AugmentationFieldGetter.java index cfec5c3666..448a4616f2 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/AugmentationFieldGetter.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/AugmentationFieldGetter.java @@ -44,6 +44,9 @@ abstract class AugmentationFieldGetter { } }; + private static final LoadingCache, AugmentationFieldGetter> AUGMENTATION_GETTERS = CacheBuilder.newBuilder().weakKeys().build( + new AugmentationGetterLoader()); + /** * * Retrieves augmentations from supplied object @@ -53,9 +56,6 @@ abstract class AugmentationFieldGetter { */ protected abstract Map>, Augmentation> getAugmentations(final Object input); - private static final LoadingCache, AugmentationFieldGetter> AUGMENTATION_GETTERS = CacheBuilder - .newBuilder().weakKeys().build(new AugmentationGetterLoader()); - public static AugmentationFieldGetter getGetter(final Class clz) { if(AugmentationHolder.class.isAssignableFrom(clz)) { return AUGMENTATION_HOLDER_GETTER; diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingReflections.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingReflections.java index a11c5a4bc0..789f9542ee 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingReflections.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingReflections.java @@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.Sets; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.net.URI; @@ -274,14 +273,10 @@ public class BindingReflections { checkArgument(cls != null); String packageName = getModelRootPackageName(cls.getPackage()); final String potentialClassName = getModuleInfoClassName(packageName); - return ClassLoaderUtils.withClassLoader(cls.getClassLoader(), new Callable() { - @Override - public YangModuleInfo call() throws ClassNotFoundException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { - Class moduleInfoClass = Thread.currentThread().getContextClassLoader().loadClass(potentialClassName); - return (YangModuleInfo) moduleInfoClass.getMethod("getInstance").invoke(null); - } - }); + return ClassLoaderUtils.withClassLoader(cls.getClassLoader(), (Callable) () -> { + Class moduleInfoClass = Thread.currentThread().getContextClassLoader().loadClass(potentialClassName); + return (YangModuleInfo) moduleInfoClass.getMethod("getInstance").invoke(null); + }); } public static String getModuleInfoClassName(final String packageName) { @@ -300,7 +295,7 @@ public class BindingReflections { if (DataContainer.class.isAssignableFrom(cls) || Augmentation.class.isAssignableFrom(cls)) { return true; } - return (cls.getName().startsWith(BindingMapping.PACKAGE_PREFIX)); + return cls.getName().startsWith(BindingMapping.PACKAGE_PREFIX); } /** @@ -446,9 +441,9 @@ public class BindingReflections { return ret; } - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "rawtypes" }) private static Optional> getYangModeledReturnType(final Method method) { - if (method.getName().equals("getClass") || !method.getName().startsWith("get") + if ("getClass".equals(method.getName()) || !method.getName().startsWith("get") || method.getParameterTypes().length > 0) { return Optional.absent(); } @@ -460,19 +455,13 @@ public class BindingReflections { } else if (List.class.isAssignableFrom(returnType)) { try { return ClassLoaderUtils.withClassLoader(method.getDeclaringClass().getClassLoader(), - new Callable>>() { - @SuppressWarnings("rawtypes") - @Override - public Optional> call() { - Type listResult = ClassLoaderUtils.getFirstGenericParameter(method - .getGenericReturnType()); - if (listResult instanceof Class - && DataContainer.class.isAssignableFrom((Class) listResult)) { - return Optional.> of((Class) listResult); - } - return Optional.absent(); + (Callable>>) () -> { + Type listResult = ClassLoaderUtils.getFirstGenericParameter(method.getGenericReturnType()); + if (listResult instanceof Class + && DataContainer.class.isAssignableFrom((Class) listResult)) { + return Optional.> of((Class) listResult); } - + return Optional.absent(); }); } catch (Exception e) { /* @@ -493,97 +482,93 @@ public class BindingReflections { public Optional load(final Class key) throws Exception { return resolveQNameNoCache(key); } - } - /** - * - * Tries to resolve QName for supplied class. - * - * Looks up for static field with name from constant - * {@link BindingMapping#QNAME_STATIC_FIELD_NAME} and returns value if - * present. - * - * If field is not present uses {@link #computeQName(Class)} to compute - * QName for missing types. - * - * @param key - * @return - */ - private static Optional resolveQNameNoCache(final Class key) { - try { - Field field = key.getField(BindingMapping.QNAME_STATIC_FIELD_NAME); - Object obj = field.get(null); - if (obj instanceof QName) { - return Optional.of((QName) obj); - } + /** + * + * Tries to resolve QName for supplied class. + * + * Looks up for static field with name from constant {@link BindingMapping#QNAME_STATIC_FIELD_NAME} and returns + * value if present. + * + * If field is not present uses {@link #computeQName(Class)} to compute QName for missing types. + * + * @param key + * @return + */ + private static Optional resolveQNameNoCache(final Class key) { + try { + Field field = key.getField(BindingMapping.QNAME_STATIC_FIELD_NAME); + Object obj = field.get(null); + if (obj instanceof QName) { + return Optional.of((QName) obj); + } - } catch (NoSuchFieldException e) { - return Optional.of(computeQName(key)); - - } catch (SecurityException | IllegalArgumentException | IllegalAccessException e) { - /* - * - * It is safe to log this this exception on debug, since this method - * should not fail. Only failures are possible if the runtime / - * backing. - */ - LOG.debug("Unexpected exception during extracting QName for {}", key, e); - } - return Optional.absent(); - } + } catch (NoSuchFieldException e) { + return Optional.of(computeQName(key)); - /** - * Computes QName for supplied class - * - * Namespace and revision are same as {@link YangModuleInfo} associated with - * supplied class. - *

- * If class is - *

    - *
  • rpc input: local name is "input". - *
  • rpc output: local name is "output". - *
  • augmentation: local name is "module name". - *
- * - * There is also fallback, if it is not possible to compute QName using - * following algorithm returns module QName. - * - * FIXME: Extend this algorithm to also provide QName for YANG modeled - * simple types. - * - * @throws IllegalStateException - * If YangModuleInfo could not be resolved - * @throws IllegalArgumentException - * If supplied class was not derived from YANG model. - * - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private static QName computeQName(final Class key) { - if (isBindingClass(key)) { - YangModuleInfo moduleInfo; - try { - moduleInfo = getModuleInfo(key); - } catch (Exception e) { - throw new IllegalStateException("Unable to get QName for " + key + ". YangModuleInfo was not found.", e); + } catch (SecurityException | IllegalArgumentException | IllegalAccessException e) { + /* + * + * It is safe to log this this exception on debug, since this method + * should not fail. Only failures are possible if the runtime / + * backing. + */ + LOG.debug("Unexpected exception during extracting QName for {}", key, e); } - final QName module = getModuleQName(moduleInfo).intern(); - if (Augmentation.class.isAssignableFrom(key)) { - return module; - } else if (isRpcType(key)) { - final String className = key.getSimpleName(); - if (className.endsWith(BindingMapping.RPC_OUTPUT_SUFFIX)) { - return QName.create(module, "output").intern(); - } else { - return QName.create(module, "input").intern(); + return Optional.absent(); + } + + /** + * Computes QName for supplied class + * + * Namespace and revision are same as {@link YangModuleInfo} associated with supplied class. + *

+ * If class is + *

    + *
  • rpc input: local name is "input". + *
  • rpc output: local name is "output". + *
  • augmentation: local name is "module name". + *
+ * + * There is also fallback, if it is not possible to compute QName using following algorithm returns module + * QName. + * + * FIXME: Extend this algorithm to also provide QName for YANG modeled simple types. + * + * @throws IllegalStateException If YangModuleInfo could not be resolved + * @throws IllegalArgumentException If supplied class was not derived from YANG model. + * + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + private static QName computeQName(final Class key) { + if (isBindingClass(key)) { + YangModuleInfo moduleInfo; + try { + moduleInfo = getModuleInfo(key); + } catch (Exception e) { + throw new IllegalStateException("Unable to get QName for " + key + + ". YangModuleInfo was not found.", e); } + final QName module = getModuleQName(moduleInfo).intern(); + if (Augmentation.class.isAssignableFrom(key)) { + return module; + } else if (isRpcType(key)) { + final String className = key.getSimpleName(); + if (className.endsWith(BindingMapping.RPC_OUTPUT_SUFFIX)) { + return QName.create(module, "output").intern(); + } else { + return QName.create(module, "input").intern(); + } + } + /* + * Fallback for Binding types which do not have QNAME field + */ + return module; + } else { + throw new IllegalArgumentException("Supplied class " + key + "is not derived from YANG."); } - /* - * Fallback for Binding types which do not have QNAME field - */ - return module; - } else { - throw new IllegalArgumentException("Supplied class " + key + "is not derived from YANG."); } + } /** diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/DataObjectReadingUtil.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/DataObjectReadingUtil.java index f4fcf71359..1cdd9e4faa 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/DataObjectReadingUtil.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/DataObjectReadingUtil.java @@ -33,6 +33,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; public class DataObjectReadingUtil { + private static final DataObjectReadingStrategy REAUSABLE_AUGMENTATION_READING_STRATEGY = new AugmentationReadingStrategy(); + private DataObjectReadingUtil() { throw new UnsupportedOperationException("Utility class. Instantion is not allowed."); } @@ -103,9 +105,8 @@ public class DataObjectReadingUtil { private static DataObjectReadingStrategy resolveReadStrategy(final Class parentClass, final Class type) { - DataObjectReadingStrategy strategy = createReadStrategy(parentClass, type); // FIXME: Add caching of strategies - return strategy; + return createReadStrategy(parentClass, type); } private static DataObjectReadingStrategy createReadStrategy(final Class parent, @@ -128,19 +129,8 @@ public class DataObjectReadingUtil { return new ContainerReadingStrategy(parent, child); } - private static Method resolveGetterMethod(final Class parent, final Class child) { - String methodName = "get" + child.getSimpleName(); - try { - return parent.getMethod(methodName); - } catch (NoSuchMethodException e) { - throw new IllegalArgumentException(e); - } catch (SecurityException e) { - throw new IllegalStateException(e); - } - } - @SuppressWarnings("rawtypes") - private static abstract class DataObjectReadingStrategy { + private abstract static class DataObjectReadingStrategy { private final Class parentType; private final Class childType; @@ -181,6 +171,17 @@ public class DataObjectReadingUtil { public abstract DataContainer read(DataContainer parent, Class childType); + private static Method resolveGetterMethod(final Class parent, final Class child) { + String methodName = "get" + child.getSimpleName(); + try { + return parent.getMethod(methodName); + } catch (NoSuchMethodException e) { + throw new IllegalArgumentException(e); + } catch (SecurityException e) { + throw new IllegalStateException(e); + } + } + } @SuppressWarnings("rawtypes") @@ -245,11 +246,7 @@ public class DataObjectReadingUtil { return readAll(dataList, builder); } } - } catch (InvocationTargetException e) { - throw new IllegalStateException(e); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e); - } catch (IllegalArgumentException e) { + } catch (InvocationTargetException | IllegalArgumentException | IllegalAccessException e) { throw new IllegalStateException(e); } return Collections.emptyMap(); @@ -285,8 +282,6 @@ public class DataObjectReadingUtil { } - private static final DataObjectReadingStrategy REAUSABLE_AUGMENTATION_READING_STRATEGY = new AugmentationReadingStrategy(); - private static final class AugmentationReadingStrategy extends DataObjectReadingStrategy { public AugmentationReadingStrategy() { diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/NotificationListenerInvoker.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/NotificationListenerInvoker.java index 3476d34027..9ce933fcb0 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/NotificationListenerInvoker.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/NotificationListenerInvoker.java @@ -41,6 +41,32 @@ public final class NotificationListenerInvoker { .newBuilder().weakKeys() .build(new CacheLoader, NotificationListenerInvoker>() { + private NotificationListenerInvoker createInvoker( + final Class key) { + return new NotificationListenerInvoker(createInvokerMap(key)); + } + + private Map createInvokerMap(final Class key) { + final Builder ret = ImmutableMap. builder(); + for (final Method method : key.getMethods()) { + if (BindingReflections.isNotificationCallback(method)) { + + final Class notification = method.getParameterTypes()[0]; + final QName name = BindingReflections.findQName(notification); + MethodHandle handle; + try { + handle = LOOKUP.unreflect(method).asType(MethodType.methodType(void.class, + NotificationListener.class, DataContainer.class)); + ret.put(name, handle); + } catch (final IllegalAccessException e) { + throw new IllegalStateException("Can not access public method.", e); + } + } + + } + return ret.build(); + } + @Override public NotificationListenerInvoker load(final Class key) throws Exception { return createInvoker(key); @@ -94,29 +120,4 @@ public final class NotificationListenerInvoker { } } - private static NotificationListenerInvoker createInvoker(final Class key) { - return new NotificationListenerInvoker(createInvokerMap(key)); - } - - private static Map createInvokerMap(final Class key) { - final Builder ret = ImmutableMap.builder(); - for (final Method method : key.getMethods()) { - if (BindingReflections.isNotificationCallback(method)) { - - final Class notification = method.getParameterTypes()[0]; - final QName name = BindingReflections.findQName(notification); - MethodHandle handle; - try { - handle = LOOKUP.unreflect(method).asType( - MethodType.methodType(void.class, NotificationListener.class, DataContainer.class)); - ret.put(name, handle); - } catch (final IllegalAccessException e) { - throw new IllegalStateException("Can not access public method.", e); - } - } - - } - return ret.build(); - } - } -- 2.36.6