Map identities to proper objects
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / reactor / TypeReference.java
index 629306c8db50ea49e1ee57c5fa2689f6b77e2852..cde69a941abc1487d43e28f969d14b3efc21fd37 100644 (file)
@@ -10,11 +10,8 @@ package org.opendaylight.mdsal.binding.generator.impl.reactor;
 import static java.util.Objects.requireNonNull;
 
 import java.util.List;
-import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.model.api.GeneratedType;
-import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.ri.Types;
 
@@ -22,7 +19,7 @@ abstract class TypeReference {
     private static final class Identityref extends TypeReference {
         private final List<IdentityGenerator> referencedGenerators;
 
-        private ParameterizedType returnType;
+        private Type returnType;
 
         Identityref(final List<IdentityGenerator> referencedGenerators) {
             this.referencedGenerators = requireNonNull(referencedGenerators);
@@ -31,15 +28,15 @@ abstract class TypeReference {
         @Override
         Type methodReturnType(final TypeBuilderFactory builderFactory) {
             if (returnType == null) {
-                final List<GeneratedType> referencedTypes = referencedGenerators.stream()
-                    .map(gen -> gen.getGeneratedType(builderFactory))
-                    .collect(Collectors.toUnmodifiableList());
                 // FIXME: This deals only with RFC6020 semantics. In order to deal with full RFC7950 semantics, we need
                 //        to analyze all the types and come up with the lowest-common denominator and use that as the
                 //        return type. We also need to encode restrictions, so that builder generator ends up checking
                 //        identities being passed -- because the identities may be completely unrelated, in which case
                 //        we cannot generate type-safe code.
-                returnType = Types.classType(Types.wildcardTypeFor(referencedTypes.get(0).getIdentifier()));
+                returnType = referencedGenerators.stream()
+                    .map(gen -> gen.getGeneratedType(builderFactory))
+                    .findFirst()
+                    .orElseThrow();
             }
             return returnType;
         }