import static org.opendaylight.mdsal.binding.model.ri.BindingTypes.identifiable;
+import java.util.List;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultListRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.api.MethodSignature.ValueMechanics;
import org.opendaylight.mdsal.binding.model.api.Type;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder;
import org.opendaylight.mdsal.binding.model.ri.Types;
+import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
+import org.opendaylight.mdsal.binding.runtime.api.ListRuntimeType;
+import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.common.Ordering;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
/**
* Generator corresponding to a {@code list} statement.
*/
-final class ListGenerator extends CompositeSchemaTreeGenerator<ListEffectiveStatement, ListGenerator> {
+final class ListGenerator extends CompositeSchemaTreeGenerator<ListEffectiveStatement, ListRuntimeType> {
private final @Nullable KeyGenerator keyGen;
- ListGenerator(final ListEffectiveStatement statement, final AbstractCompositeGenerator<?> parent) {
+ ListGenerator(final ListEffectiveStatement statement, final AbstractCompositeGenerator<?, ?> parent) {
super(statement, parent);
keyGen = statement.findFirstEffectiveSubstatement(KeyEffectiveStatement.class)
.map(key -> new KeyGenerator(key, parent, this))
return builder.build();
}
+ @Override
+ ListRuntimeType createRuntimeType(final GeneratedType type, final ListEffectiveStatement statement,
+ final List<RuntimeType> children, final List<AugmentRuntimeType> augments) {
+ return new DefaultListRuntimeType(type, statement, children, augments,
+ keyGen != null ? keyGen.runtimeType().orElseThrow() : null);
+ }
+
@Override
Type methodReturnType(final TypeBuilderFactory builderFactory) {
final Type generatedType = super.methodReturnType(builderFactory);
// We are wrapping the generated type in either a List or a Map based on presence of the key
- if (keyGen != null) {
- final Ordering ordering = statement()
- .findFirstEffectiveSubstatementArgument(OrderedByEffectiveStatement.class)
- .orElse(Ordering.SYSTEM);
- if (ordering == Ordering.SYSTEM) {
- return Types.mapTypeFor(keyGen.getGeneratedType(builderFactory), generatedType);
- }
+ if (keyGen != null && statement().ordering() == Ordering.SYSTEM) {
+ return Types.mapTypeFor(keyGen.getGeneratedType(builderFactory), generatedType);
}
return Types.listTypeFor(generatedType);