Use QName.withModule()
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / yangtools / binding / data / codec / impl / DataObjectCodecContext.java
index c06fc5ce9b33e3541a32c5c59f27ebeeeb752b63..fe10dc8f4444ef295a99a6ee6cd1b394632fd2e4 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSortedMap;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
@@ -31,8 +30,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy;
-import org.opendaylight.yangtools.sal.binding.model.api.Type;
+import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
+import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.yangtools.yang.binding.Augmentable;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
@@ -57,15 +56,9 @@ import org.slf4j.LoggerFactory;
 
 abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeContainer> extends DataContainerCodecContext<D,T> {
     private static final Logger LOG = LoggerFactory.getLogger(DataObjectCodecContext.class);
-    private static final Lookup LOOKUP = MethodHandles.publicLookup();
     private static final MethodType CONSTRUCTOR_TYPE = MethodType.methodType(void.class, InvocationHandler.class);
     private static final MethodType DATAOBJECT_TYPE = MethodType.methodType(DataObject.class, InvocationHandler.class);
-    private static final Comparator<Method> METHOD_BY_ALPHABET = new Comparator<Method>() {
-        @Override
-        public int compare(final Method o1, final Method o2) {
-            return o1.getName().compareTo(o2.getName());
-        }
-    };
+    private static final Comparator<Method> METHOD_BY_ALPHABET = (o1, o2) -> o1.getName().compareTo(o2.getName());
 
     private final ImmutableMap<String, LeafNodeCodecContext<?>> leafChild;
     private final ImmutableMap<YangInstanceIdentifier.PathArgument, NodeContextSupplier> byYang;
@@ -126,7 +119,8 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
 
         final Class<?> proxyClass = Proxy.getProxyClass(getBindingClass().getClassLoader(),  new Class[] { getBindingClass(), AugmentationHolder.class });
         try {
-            proxyConstructor = LOOKUP.findConstructor(proxyClass, CONSTRUCTOR_TYPE).asType(DATAOBJECT_TYPE);
+            proxyConstructor = MethodHandles.publicLookup().findConstructor(proxyClass, CONSTRUCTOR_TYPE)
+                    .asType(DATAOBJECT_TYPE);
         } catch (NoSuchMethodException | IllegalAccessException e) {
             throw new IllegalStateException("Failed to find contructor for class " + proxyClass);
         }
@@ -166,7 +160,7 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
     public <DV extends DataObject> Optional<DataContainerCodecContext<DV, ?>> possibleStreamChild(
             final Class<DV> childClass) {
         final DataContainerCodecPrototype<?> childProto = streamChildPrototype(childClass);
-        if(childProto != null) {
+        if (childProto != null) {
             return Optional.<DataContainerCodecContext<DV,?>>of((DataContainerCodecContext<DV,?>) childProto.get());
         }
         return Optional.absent();
@@ -198,15 +192,16 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
     @Override
     public NodeCodecContext<D> yangPathArgumentChild(final YangInstanceIdentifier.PathArgument arg) {
         final NodeContextSupplier childSupplier;
-        if(arg instanceof NodeIdentifierWithPredicates) {
+        if (arg instanceof NodeIdentifierWithPredicates) {
             childSupplier = byYang.get(new NodeIdentifier(arg.getNodeType()));
         } else if (arg instanceof AugmentationIdentifier) {
             childSupplier = yangAugmentationChild((AugmentationIdentifier) arg);
         } else {
             childSupplier = byYang.get(arg);
         }
-        childNonNull(childSupplier != null, arg, "Argument %s is not valid child of %s", arg, getSchema());
-        return (NodeCodecContext<D>) childSupplier.get();
+
+        return (NodeCodecContext<D>) childNonNull(childSupplier, arg,
+            "Argument %s is not valid child of %s", arg, getSchema()).get();
     }
 
     protected final LeafNodeCodecContext<?> getLeafChild(final String name) {
@@ -239,7 +234,7 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
             }
         } else {
             // We are looking for instantiation via uses in other module
-            final QName instantiedName = QName.create(namespace(), origDef.getQName().getLocalName());
+            final QName instantiedName = origDef.getQName().withModule(namespace());
             final DataSchemaNode potential = getSchema().getDataChildByName(instantiedName);
             // We check if it is really instantiated from same
             // definition as class was derived
@@ -292,7 +287,7 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
          */
         @SuppressWarnings("rawtypes")
         final Class<?> augTarget = BindingReflections.findAugmentationTarget((Class) childClass);
-        if ((getBindingClass().equals(augTarget))) {
+        if (getBindingClass().equals(augTarget)) {
             for (final DataContainerCodecPrototype<?> realChild : byStreamAugmented.values()) {
                 if (Augmentation.class.isAssignableFrom(realChild.getBindingClass())
                         && BindingReflections.isSubstitutionFor(childClass, realChild.getBindingClass())) {
@@ -338,7 +333,8 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
         try {
             return (D) proxyConstructor.invokeExact((InvocationHandler)new LazyDataObject<>(this, node));
         } catch (final Throwable e) {
-            throw Throwables.propagate(e);
+            Throwables.throwIfUnchecked(e);
+            throw new RuntimeException(e);
         }
     }
 
@@ -353,7 +349,7 @@ abstract class DataObjectCodecContext<D extends DataObject,T extends DataNodeCon
             if (childValue instanceof AugmentationNode) {
                 final AugmentationNode augDomNode = (AugmentationNode) childValue;
                 final DataContainerCodecPrototype<?> codecProto = yangAugmentationChild(augDomNode.getIdentifier());
-                if(codecProto != null) {
+                if (codecProto != null) {
                     final DataContainerCodecContext<?, ?> codec = codecProto.get();
                     map.put(codec.getBindingClass(), codec.deserializeObject(augDomNode));
                 }