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;
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);
@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;
}