import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder;
-import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypeBuilder;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypes;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataSchemaNodeMixin;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MustConstraintMixin;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.UserOrderedMixin;
UserOrderedMixin<QName, LeafListStatement>, DataSchemaNodeMixin<QName, LeafListStatement>,
MustConstraintMixin<QName, LeafListStatement> {
private final @NonNull Object substatements;
- private final @NonNull SchemaPath path;
+ private final @NonNull Immutable path;
private final @NonNull TypeDefinition<?> type;
private final int flags;
- AbstractLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+ AbstractLeafListEffectiveStatement(final LeafListStatement declared, final Immutable path, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(declared);
+ this.path = requireNonNull(path);
this.substatements = maskList(substatements);
+ this.flags = flags;
+ // TODO: lazy instantiation?
+ this.type = buildType();
+ }
+
+ AbstractLeafListEffectiveStatement(final AbstractLeafListEffectiveStatement original, final Immutable path,
+ final int flags) {
+ super(original);
this.path = requireNonNull(path);
+ this.substatements = original.substatements;
this.flags = flags;
// TODO: lazy instantiation?
this.type = buildType();
}
@Override
- public final @NonNull QName argument() {
+ public final QName argument() {
return getQName();
}
@Override
- public final @NonNull SchemaPath getPath() {
+ public final Immutable pathObject() {
return path;
}
return userOrdered();
}
+ @Override
+ public final LeafListEffectiveStatement asEffectiveStatement() {
+ return this;
+ }
+
@Override
public final String toString() {
return getClass().getSimpleName() + "[" + getQName() + "]";
private TypeDefinition<?> buildType() {
final TypeEffectiveStatement<?> typeStmt = findFirstEffectiveSubstatement(TypeEffectiveStatement.class).get();
final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
- getPath());
+ getQName());
for (final EffectiveStatement<?, ?> stmt : effectiveSubstatements()) {
- // NOTE: 'default' is ommitted here on purpose
+ // NOTE: 'default' is omitted here on purpose
if (stmt instanceof DescriptionEffectiveStatement) {
builder.setDescription(((DescriptionEffectiveStatement)stmt).argument());
} else if (stmt instanceof ReferenceEffectiveStatement) {