Speed up BaseYangTypesProvider's restricted types 50/89150/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 20 Apr 2020 13:20:54 +0000 (15:20 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 20 Apr 2020 16:40:42 +0000 (18:40 +0200)
We are currently bouncing through explicit classes and a switch
expression which pretty-much duplicates BaseYangTypes. Clean this
up by exposing an alternative method to create restricted types,
so that we can first lookup mapping and then create a restricted
type.

Change-Id: I98601b6bf4ddb43c76c62d4f988d174456be4229
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java

index 2427eb1c33e1f6cd5d46609f60e152aa93b7263b..4eb97a1b4ded0b96ffea6d9cf09225e89b976a26 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.mdsal.binding.generator.util;
 
 import com.google.common.annotations.Beta;
-import java.math.BigDecimal;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
 import org.opendaylight.mdsal.binding.model.api.Restrictions;
@@ -16,10 +15,6 @@ import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.util.BaseYangTypes;
 import org.opendaylight.mdsal.binding.model.util.Types;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
-import org.opendaylight.yangtools.yang.common.Uint16;
-import org.opendaylight.yangtools.yang.common.Uint32;
-import org.opendaylight.yangtools.yang.common.Uint64;
-import org.opendaylight.yangtools.yang.common.Uint8;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
@@ -52,38 +47,8 @@ public final class BaseYangTypesProvider implements TypeProvider {
     public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
             final Restrictions restrictions, final boolean lenientRelativeLeafrefs) {
         final String typeName = type.getQName().getLocalName();
-        if (restrictions != null) {
-            switch (typeName) {
-                case "binary":
-                    return Types.typeForClass(byte[].class, restrictions);
-                case "decimal64":
-                    return Types.typeForClass(BigDecimal.class, restrictions);
-                case "enumeration":
-                    return Types.typeForClass(Enum.class, restrictions);
-                case "int8":
-                    return Types.typeForClass(Byte.class, restrictions);
-                case "int16":
-                    return Types.typeForClass(Short.class, restrictions);
-                case "int32":
-                    return Types.typeForClass(Integer.class, restrictions);
-                case "int64":
-                    return Types.typeForClass(Long.class, restrictions);
-                case "string":
-                    return Types.typeForClass(String.class, restrictions);
-                case "uint8":
-                    return Types.typeForClass(Uint8.class, restrictions);
-                case "uint16":
-                    return Types.typeForClass(Uint16.class, restrictions);
-                case "uint32":
-                    return Types.typeForClass(Uint32.class, restrictions);
-                case "uint64":
-                    return Types.typeForClass(Uint64.class, restrictions);
-                default:
-                    break;
-            }
-        }
-
-        return BaseYangTypes.javaTypeForYangType(typeName);
+        final Type mapped = BaseYangTypes.javaTypeForYangType(typeName);
+        return mapped == null || restrictions == null ? mapped : Types.restrictedType(mapped, restrictions);
     }
 
     @Override
index b0dd9c0a90edd9e0418e2c5a2c14addb9d7a0d91..894e48291c003b5accd6a6565d57645214565ce4 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.model.util;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.annotations.Beta;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
@@ -130,15 +131,18 @@ public final class Types {
 
     public static @NonNull ConcreteType typeForClass(final @NonNull Class<?> cls,
             final @Nullable Restrictions restrictions) {
-        if (restrictions == null) {
-            return typeForClass(cls);
-        }
+        return restrictions == null ? typeForClass(cls) : restrictedType(JavaTypeName.create(cls), restrictions);
+    }
 
-        final JavaTypeName identifier = JavaTypeName.create(cls);
-        if (restrictions instanceof DefaultRestrictions) {
-            return new ConcreteTypeImpl(identifier, restrictions);
-        }
-        return new BaseTypeWithRestrictionsImpl(identifier, restrictions);
+    @Beta
+    public static @NonNull ConcreteType restrictedType(final Type type, final @NonNull Restrictions restrictions) {
+        return restrictedType(type.getIdentifier(), restrictions);
+    }
+
+    private static @NonNull ConcreteType restrictedType(final JavaTypeName identifier,
+            final @NonNull Restrictions restrictions) {
+        return restrictions instanceof DefaultRestrictions ? new ConcreteTypeImpl(identifier, restrictions)
+                : new BaseTypeWithRestrictionsImpl(identifier, restrictions);
     }
 
     /**