BindingRuntimeTypes should expose SchemaContext 27/87827/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 21:28:38 +0000 (22:28 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 21:43:18 +0000 (22:43 +0100)
This is an invariant which is useful to users, make sure we expose
it so that they do not have to track it separately.

Change-Id: If4ddb0915eb433a9f8f857bde473a5de798192ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/generator/api/BindingRuntimeTypes.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/RuntimeTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java

index d9ef1a694b9027601b5a865040aea70cf4eaeb45..8702d9ae34d3684c423510901304d372709cc926 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.mdsal.binding.generator.api;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.BiMap;
@@ -17,32 +19,42 @@ import com.google.common.collect.Multimap;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 
 /**
  * The result of BindingGenerator run. Contains mapping between Types and SchemaNodes.
  */
 @Beta
-public final class BindingRuntimeTypes implements Immutable {
-
+public final class BindingRuntimeTypes implements SchemaContextProvider, Immutable {
+    private final @NonNull SchemaContext schemaContext;
     private final ImmutableMap<Type, AugmentationSchemaNode> typeToAugmentation;
     private final ImmutableBiMap<Type, WithStatus> typeToSchema;
     private final ImmutableMultimap<Type, Type> choiceToCases;
     private final ImmutableMap<QName, Type> identities;
 
-    public BindingRuntimeTypes(final Map<Type, AugmentationSchemaNode> typeToAugmentation,
+    public BindingRuntimeTypes(final SchemaContext schemaContext,
+            final Map<Type, AugmentationSchemaNode> typeToAugmentation,
             final BiMap<Type, WithStatus> typeToDefiningSchema, final Multimap<Type, Type> choiceToCases,
             final Map<QName, Type> identities) {
+        this.schemaContext = requireNonNull(schemaContext);
         this.typeToAugmentation = ImmutableMap.copyOf(typeToAugmentation);
         this.typeToSchema = ImmutableBiMap.copyOf(typeToDefiningSchema);
         this.choiceToCases = ImmutableMultimap.copyOf(choiceToCases);
         this.identities = ImmutableMap.copyOf(identities);
     }
 
+    @Override
+    public SchemaContext getSchemaContext() {
+        return schemaContext;
+    }
+
     public Optional<AugmentationSchemaNode> findAugmentation(final Type type) {
         return Optional.ofNullable(typeToAugmentation.get(type));
     }
index 02340ac9483f459804da80399756ee2f156b6482..5c4811c8ebadcd980b7adb70900f2638ab7ed8bc 100644 (file)
@@ -62,6 +62,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.model.api.AccessModifier;
 import org.opendaylight.mdsal.binding.model.api.Constant;
@@ -184,7 +185,7 @@ abstract class AbstractTypeGenerator {
     /**
      * Holds reference to schema context to resolve data of augmented element when creating augmentation builder.
      */
-    private final SchemaContext schemaContext;
+    private final @NonNull SchemaContext schemaContext;
 
     /**
      * Holds renamed elements.
@@ -206,6 +207,10 @@ abstract class AbstractTypeGenerator {
         contexts.forEach(this::allAugmentsToGenTypes);
     }
 
+    final @NonNull SchemaContext schemaContext() {
+        return schemaContext;
+    }
+
     final Collection<ModuleContext> moduleContexts() {
         return genCtx.values();
     }
index e9ad089d637e3979b3cdafccd642c4239b3de011..eaecb7c3e42ad3b3329936fbea1a9cf230dda217 100644 (file)
@@ -63,7 +63,8 @@ final class RuntimeTypeGenerator extends AbstractTypeGenerator {
             }
         }
 
-        return new BindingRuntimeTypes(augmentationToSchema, typeToDefiningSchema, choiceToCases, identities);
+        return new BindingRuntimeTypes(schemaContext(), augmentationToSchema, typeToDefiningSchema, choiceToCases,
+            identities);
     }
 
     private static Type builtType(final Map<Type, Type> knownTypes, final Type type) {
index 31a80a1bddab40253aa50920f03a9be414369d92..efe0c5f6945708bcb6a2a9c55362df63d4f90b10 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.generator.util;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
@@ -58,6 +59,7 @@ import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
@@ -80,14 +82,13 @@ import org.slf4j.LoggerFactory;
  *
  * <p>Same goes for all possible augmentations.
  */
-public final class BindingRuntimeContext implements Immutable {
+public final class BindingRuntimeContext implements SchemaContextProvider, Immutable {
 
     private static final Logger LOG = LoggerFactory.getLogger(BindingRuntimeContext.class);
     private static final char DOT = '.';
 
     private final BindingRuntimeTypes runtimeTypes;
     private final ClassLoadingStrategy strategy;
-    private final SchemaContext schemaContext;
 
     private final LoadingCache<QName, Class<?>> identityClasses = CacheBuilder.newBuilder().weakValues().build(
         new CacheLoader<QName, Class<?>>() {
@@ -103,10 +104,9 @@ public final class BindingRuntimeContext implements Immutable {
             }
         });
 
-    private BindingRuntimeContext(final ClassLoadingStrategy strategy, final SchemaContext schema) {
-        this.strategy = strategy;
-        this.schemaContext = schema;
-        runtimeTypes = new BindingGeneratorImpl().generateTypeMapping(schema);
+    private BindingRuntimeContext(final BindingRuntimeTypes runtimeTypes, final ClassLoadingStrategy strategy) {
+        this.runtimeTypes = requireNonNull(runtimeTypes);
+        this.strategy = requireNonNull(strategy);
     }
 
     /**
@@ -117,7 +117,7 @@ public final class BindingRuntimeContext implements Immutable {
      * @return Instance of BindingRuntimeContext for supplied schema context.
      */
     public static BindingRuntimeContext create(final ClassLoadingStrategy strategy, final SchemaContext ctx) {
-        return new BindingRuntimeContext(strategy, ctx);
+        return new BindingRuntimeContext(new BindingGeneratorImpl().generateTypeMapping(ctx), strategy);
     }
 
     /**
@@ -135,8 +135,9 @@ public final class BindingRuntimeContext implements Immutable {
      *
      * @return stable view of schema context
      */
+    @Override
     public SchemaContext getSchemaContext() {
-        return schemaContext;
+        return runtimeTypes.getSchemaContext();
     }
 
     /**
@@ -490,6 +491,6 @@ public final class BindingRuntimeContext implements Immutable {
         return MoreObjects.toStringHelper(this)
                 .add("ClassLoadingStrategy", strategy)
                 .add("runtimeTypes", runtimeTypes)
-                .add("schemaContext", schemaContext).toString();
+                .toString();
     }
 }