Retain protype in DataContainerCodecContext
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / AbstractBindingNormalizedNodeCacheHolder.java
index d900d4e8c816085899631f4567fd296f0e3f8680..e50b64402e3168b99fa9f8c750a8279c112543dd 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableSet;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingObjectCodecTreeNode;
-import org.opendaylight.mdsal.binding.dom.codec.impl.LeafNodeCodecContext.OfTypeObject;
 import org.opendaylight.yangtools.yang.binding.BindingObject;
 
 /**
@@ -23,34 +22,35 @@ import org.opendaylight.yangtools.yang.binding.BindingObject;
  */
 abstract class AbstractBindingNormalizedNodeCacheHolder {
     @SuppressWarnings("rawtypes")
-    private final LoadingCache<NodeCodecContext, AbstractBindingNormalizedNodeCache> caches = CacheBuilder
-            .newBuilder().build(new CacheLoader<NodeCodecContext, AbstractBindingNormalizedNodeCache>() {
-                @Override
-                public AbstractBindingNormalizedNodeCache load(final NodeCodecContext key) {
-                    if (key instanceof DataContainerCodecContext) {
-                        return new DataObjectNormalizedNodeCache(AbstractBindingNormalizedNodeCacheHolder.this,
-                            (DataContainerCodecContext<?, ?>) key);
-                    } else if (key instanceof OfTypeObject) {
-                        return new TypeObjectNormalizedNodeCache<>((OfTypeObject)key);
-                    } else {
-                        throw new IllegalStateException("Unhandled context " + key);
-                    }
+    private final LoadingCache<CodecContext, AbstractBindingNormalizedNodeCache> caches =
+        CacheBuilder.newBuilder().build(new CacheLoader<>() {
+            @Override
+            public AbstractBindingNormalizedNodeCache load(final CodecContext key) {
+                // FIXME: Use a switch expression once we have https://openjdk.org/jeps/441
+                if (key instanceof DataContainerCodecContext<?, ?, ?> dataContainer) {
+                    return new DataObjectNormalizedNodeCache(AbstractBindingNormalizedNodeCacheHolder.this,
+                        dataContainer);
                 }
-            });
+                if (key instanceof LeafNodeCodecContext.OfTypeObject typeObject) {
+                    return new TypeObjectNormalizedNodeCache<>(typeObject);
+                }
+                throw new IllegalStateException("Unhandled context " + key);
+            }
+        });
 
-    private final ImmutableSet<Class<? extends BindingObject>> cacheSpec;
+    private final ImmutableSet<Class<?>> cacheSpec;
 
-    AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet<Class<? extends BindingObject>> cacheSpec) {
+    AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet<Class<?>> cacheSpec) {
         this.cacheSpec = requireNonNull(cacheSpec);
     }
 
     @SuppressWarnings("unchecked")
-    <T extends BindingObject, C extends NodeCodecContext & BindingObjectCodecTreeNode<?>>
+    <T extends BindingObject, C extends CodecContext & BindingObjectCodecTreeNode>
             AbstractBindingNormalizedNodeCache<T, C> getCachingSerializer(final C childCtx) {
         return isCached(childCtx.getBindingClass()) ? caches.getUnchecked(childCtx) : null;
     }
 
-    final boolean isCached(final Class<? extends BindingObject> type) {
+    final boolean isCached(final Class<?> type) {
         return cacheSpec.contains(type);
     }
 }