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=ae06c5eccc841bf50ec0eece310aeddf8b360cb7;hb=7fd1abd03d792989653a05052e723b1516a9e554;hp=bd30991073f0f7fc579ec969b9abfd41c9ec6e4b;hpb=59f98cbf8ef79ecab8ee6d7c5141704142b0f40a;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 bd30991073..ae06c5eccc 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,16 +7,14 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; -import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; -import java.util.Objects; 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; @@ -26,9 +24,9 @@ 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.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; @@ -38,30 +36,34 @@ abstract class AbstractLeafListEffectiveStatement implements LeafListEffectiveStatement, LeafListSchemaNode, DerivableSchemaNode, UserOrderedMixin, DataSchemaNodeMixin, MustConstraintMixin { - // Variable: either a single substatement or an ImmutableList 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> substatements) { super(declared); - this.substatements = substatements.size() == 1 ? substatements.get(0) : substatements; 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 - @SuppressWarnings("unchecked") public final ImmutableList> effectiveSubstatements() { - if (substatements instanceof ImmutableList) { - return (ImmutableList>) substatements; - } - verify(substatements instanceof EffectiveStatement, "Unexpected substatement %s", substatements); - return ImmutableList.of((EffectiveStatement) substatements); + return unmaskList(substatements); } @Override @@ -70,12 +72,12 @@ abstract class AbstractLeafListEffectiveStatement } @Override - public final @NonNull QName argument() { + public final QName argument() { return getQName(); } @Override - public final @NonNull SchemaPath getPath() { + public final Immutable pathObject() { return path; } @@ -90,24 +92,8 @@ abstract class AbstractLeafListEffectiveStatement } @Override - public final int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(getQName()); - result = prime * result + Objects.hashCode(getPath()); - return result; - } - - @Override - public final boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof AbstractLeafListEffectiveStatement)) { - return false; - } - final AbstractLeafListEffectiveStatement other = (AbstractLeafListEffectiveStatement) obj; - return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath()); + public final LeafListEffectiveStatement asEffectiveStatement() { + return this; } @Override @@ -118,9 +104,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) {