Do not generate pattern constraints in runtime types 71/69971/2
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 3 Mar 2018 14:08:17 +0000 (15:08 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 23 Mar 2018 16:14:33 +0000 (17:14 +0100)
We do not need this information at run-time, so short-circuit
collection so that we always end up seeing an empty expression
map.

JIRA: MDSAL-312
Change-Id: Ia62d20b247fed69e32321ec42f2cfd68d63d9afc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit c3378c4cdf4cb4bec65ae737b9cf74204bdaa02d)

binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java

index 24562f11c90ee71e0386c3f1d174944acbd6472a..5df114b7307aff5c8ead8f532da6c145777eb916 100644 (file)
@@ -15,7 +15,6 @@ import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.google.common.io.BaseEncoding;
 import java.io.Serializable;
@@ -78,8 +77,6 @@ import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.ModuleDependencySort;
@@ -708,6 +705,19 @@ public abstract class AbstractTypeProvider implements TypeProvider {
 
     abstract void addCodegenInformation(GeneratedTypeBuilderBase<?> genTOBuilder, TypeDefinition<?> typeDef);
 
+    /**
+     * Converts the pattern constraints from <code>typedef</code> to the list of
+     * the strings which represents these constraints.
+     *
+     * @param typedef
+     *            extended type in which are the pattern constraints sought
+     * @return list of strings which represents the constraint patterns
+     * @throws IllegalArgumentException
+     *             if <code>typedef</code> equals null
+     *
+     */
+    abstract Map<String, String> resolveRegExpressionsFromTypedef(TypeDefinition<?> typedef);
+
     /**
      * Converts <code>dataNode</code> to JAVA <code>Type</code>.
      *
@@ -1234,50 +1244,6 @@ public abstract class AbstractTypeProvider implements TypeProvider {
         return null;
     }
 
-    /**
-     * Converts the pattern constraints from <code>typedef</code> to the list of
-     * the strings which represents these constraints.
-     *
-     * @param typedef
-     *            extended type in which are the pattern constraints sought
-     * @return list of strings which represents the constraint patterns
-     * @throws IllegalArgumentException
-     *             if <code>typedef</code> equals null
-     *
-     */
-    private static Map<String, String> resolveRegExpressionsFromTypedef(final TypeDefinition<?> typedef) {
-        if (!(typedef instanceof StringTypeDefinition)) {
-            return ImmutableMap.of();
-        }
-
-        // TODO: run diff against base ?
-        final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) typedef).getPatternConstraints();
-        final Map<String, String> regExps = Maps.newHashMapWithExpectedSize(patternConstraints.size());
-        for (PatternConstraint patternConstraint : patternConstraints) {
-            String regEx = patternConstraint.getJavaPatternString();
-
-            // The pattern can be inverted
-            final Optional<ModifierKind> optModifier = patternConstraint.getModifier();
-            if (optModifier.isPresent()) {
-                regEx = applyModifier(optModifier.get(), regEx);
-            }
-
-            regExps.put(regEx, patternConstraint.getRegularExpressionString());
-        }
-
-        return regExps;
-    }
-
-    private static String applyModifier(final ModifierKind modifier, final String pattern) {
-        switch (modifier) {
-            case INVERT_MATCH:
-                return BindingMapping.negatePatternString(pattern);
-            default:
-                LOG.warn("Ignoring unhandled modifier {}", modifier);
-                return pattern;
-        }
-    }
-
     /**
      *
      * Adds to the <code>genTOBuilder</code> the constant which contains regular
index 2fbb19c843c6b359a552b1a573abeb5e66a5f485..3085ad07e92bc0e4475244aefc6bce2439507d02 100644 (file)
@@ -10,12 +10,22 @@ package org.opendaylight.mdsal.binding.yang.types;
 import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets;
 
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
+import org.opendaylight.yangtools.yang.binding.BindingMapping;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
+import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * {@link AbstractTypeProvider} which generates full metadata, suitable for codegen purposes. For runtime purposes,
@@ -24,6 +34,8 @@ import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
 @Beta
 // FIXME: make this class final after TypeProviderImpl is gone
 public class CodegenTypeProvider extends AbstractTypeProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(CodegenTypeProvider.class);
+
     /**
      * Creates new instance of class <code>TypeProviderImpl</code>.
      *
@@ -50,4 +62,38 @@ public class CodegenTypeProvider extends AbstractTypeProvider {
         }
         typeDef.getReference().ifPresent(genTOBuilder::setReference);
     }
+
+    @Override
+    Map<String, String> resolveRegExpressionsFromTypedef(final TypeDefinition<?> typedef) {
+        if (!(typedef instanceof StringTypeDefinition)) {
+            return ImmutableMap.of();
+        }
+
+        // TODO: run diff against base ?
+        final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) typedef).getPatternConstraints();
+        final Map<String, String> regExps = Maps.newHashMapWithExpectedSize(patternConstraints.size());
+        for (PatternConstraint patternConstraint : patternConstraints) {
+            String regEx = patternConstraint.getJavaPatternString();
+
+            // The pattern can be inverted
+            final Optional<ModifierKind> optModifier = patternConstraint.getModifier();
+            if (optModifier.isPresent()) {
+                regEx = applyModifier(optModifier.get(), regEx);
+            }
+
+            regExps.put(regEx, patternConstraint.getRegularExpressionString());
+        }
+
+        return regExps;
+    }
+
+    private static String applyModifier(final ModifierKind modifier, final String pattern) {
+        switch (modifier) {
+            case INVERT_MATCH:
+                return BindingMapping.negatePatternString(pattern);
+            default:
+                LOG.warn("Ignoring unhandled modifier {}", modifier);
+                return pattern;
+        }
+    }
 }
index be12dd1a15a2e5f3884d71e69dccfc4c3c1b3de2..0ff5a009b3edb3bc2a0e431961cc0aaa9839d4d5 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.mdsal.binding.yang.types;
 
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
 import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -33,4 +35,9 @@ public final class RuntimeTypeProvider extends AbstractTypeProvider {
     void addCodegenInformation(final GeneratedTypeBuilderBase<?> genTOBuilder, final TypeDefinition<?> typeDef) {
         // No-op
     }
+
+    @Override
+    Map<String, String> resolveRegExpressionsFromTypedef(final TypeDefinition<?> typedef) {
+        return ImmutableMap.of();
+    }
 }