Specialize relative leafref types during instantiation
[mdsal.git] / binding / mdsal-binding-generator-util / src / main / java / org / opendaylight / mdsal / binding / model / util / generated / type / builder / AbstractGeneratedType.java
index b27a0aad5c45fba1492860fbef552a0929745b6c..19771709e0d01c9e904187834e4196dd96cef6b2 100644 (file)
@@ -9,8 +9,11 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.model.api.AbstractBaseType;
 import org.opendaylight.mdsal.binding.model.api.AnnotationType;
 import org.opendaylight.mdsal.binding.model.api.Constant;
 import org.opendaylight.mdsal.binding.model.api.Enumeration;
@@ -27,7 +30,6 @@ import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBu
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder;
-import org.opendaylight.mdsal.binding.model.util.AbstractBaseType;
 
 abstract class AbstractGeneratedType extends AbstractBaseType implements GeneratedType {
 
@@ -90,6 +92,17 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat
         }
     }
 
+    protected static <T> Set<T> makeUnmodifiable(final Set<T> set) {
+        switch (set.size()) {
+            case 0:
+                return Collections.emptySet();
+            case 1:
+                return Collections.singleton(set.iterator().next());
+            default:
+                return Collections.unmodifiableSet(set);
+        }
+    }
+
     private static List<GeneratedType> toUnmodifiableEnclosedTypes(
             final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
             final List<GeneratedTOBuilder> enclosedGenTOBuilders) {
@@ -127,6 +140,14 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat
         return makeUnmodifiable(methods);
     }
 
+    protected final Set<MethodSignature> toUnmodifiableMethods(final Set<MethodSignatureBuilder> getters) {
+        final Set<MethodSignature> methods = new HashSet<>(getters.size());
+        for (final MethodSignatureBuilder methodBuilder : getters) {
+            methods.add(methodBuilder.toInstance(this));
+        }
+        return makeUnmodifiable(methods);
+    }
+
     protected final List<Enumeration> toUnmodifiableEnumerations(final List<EnumBuilder> enumBuilders) {
         final List<Enumeration> enums = new ArrayList<>(enumBuilders.size());
         for (final EnumBuilder enumBuilder : enumBuilders) {