X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Fleaf_list%2FAbstractLeafListEffectiveStatement.java;h=968f58247226ee829d13c2d4bd62ae9f619cc161;hb=refs%2Fchanges%2F04%2F95104%2F1;hp=c8357f54ae01253149c305ad6e7ef3475bfb0911;hpb=d30cf898949ced264b15b8e46e62e68e257c416f;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java index c8357f54ae..968f582472 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java @@ -7,14 +7,14 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; +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.SchemaNodeDefaults; -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; @@ -24,28 +24,41 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatemen 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.spi.meta.AbstractDeclaredEffectiveStatement; +import org.opendaylight.yangtools.yang.model.spi.type.ConcreteTypeBuilder; +import org.opendaylight.yangtools.yang.model.spi.type.ConcreteTypes; 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; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveSchemaTreeStatementState; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementStateAware; abstract class AbstractLeafListEffectiveStatement extends AbstractDeclaredEffectiveStatement.Default implements LeafListEffectiveStatement, LeafListSchemaNode, DerivableSchemaNode, UserOrderedMixin, DataSchemaNodeMixin, - MustConstraintMixin { + MustConstraintMixin, EffectiveStatementStateAware { private final @NonNull Object substatements; - private final @Nullable 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> substatements) { super(declared); + this.path = requireNonNull(path); this.substatements = maskList(substatements); - this.path = path; + 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(); @@ -67,9 +80,8 @@ abstract class AbstractLeafListEffectiveStatement } @Override - @Deprecated - public final SchemaPath getPath() { - return SchemaNodeDefaults.throwUnsupportedIfNull(this, path); + public final Immutable pathObject() { + return path; } @Override @@ -87,6 +99,11 @@ abstract class AbstractLeafListEffectiveStatement return this; } + @Override + public final EffectiveStatementState toEffectiveStatementState() { + return new EffectiveSchemaTreeStatementState(path, flags); + } + @Override public final String toString() { return getClass().getSimpleName() + "[" + getQName() + "]"; @@ -95,9 +112,9 @@ abstract class AbstractLeafListEffectiveStatement 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) {