From ddcf166646cdc1cac95b2eb9157382b86431c3e8 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 15 Feb 2021 10:39:45 +0100 Subject: [PATCH] Move more statements Migrate next batch of effective statements to yang-model-ri. As we are moving more complex items, Current.original() seems quite inadequate. Add a helper. JIRA: YANGTOOLS-1241 Change-Id: I5e57d76b1ac9bafb7b55c570e12140ff9efda1b2 Signed-off-by: Robert Varga --- .../src/main/java/module-info.java | 6 +- .../model/ri/stmt/DeclaredStatements.java | 4 +- .../model/ri/stmt/EffectiveStatements.java | 168 ++++++++++++++++++ .../stmt/impl/decl/EmptyConfigStatement.java | 6 +- .../impl/eff}/AbstractDataNodeContainer.java | 2 +- .../eff}/ActionEffectiveStatementImpl.java | 10 +- .../eff}/AugmentEffectiveStatementImpl.java | 11 +- .../eff}/ChoiceEffectiveStatementImpl.java | 15 +- .../eff}/ContainerEffectiveStatementImpl.java | 12 +- .../eff}/EmptyAnydataEffectiveStatement.java | 14 +- .../eff}/EmptyAnyxmlEffectiveStatement.java | 14 +- .../impl/eff}/EmptyBitEffectiveStatement.java | 6 +- .../eff/EmptyConfigEffectiveStatement.java | 26 +++ .../eff}/EmptyContactEffectiveStatement.java | 6 +- .../eff}/EmptyDefaultEffectiveStatement.java | 6 +- .../RegularAnydataEffectiveStatement.java | 12 +- .../eff}/RegularAnyxmlEffectiveStatement.java | 12 +- .../eff}/RegularBitEffectiveStatement.java | 6 +- .../eff}/RegularConfigEffectiveStatement.java | 6 +- .../RegularContactEffectiveStatement.java | 6 +- .../RegularDefaultEffectiveStatement.java | 6 +- .../stmt/action/ActionStatementSupport.java | 5 +- .../stmt/anydata/AnydataStatementSupport.java | 30 ++-- .../stmt/anyxml/AnyxmlStatementSupport.java | 28 +-- .../AbstractAugmentStatementSupport.java | 5 +- .../rfc7950/stmt/bit/BitStatementSupport.java | 4 +- .../stmt/case_/CaseStatementSupport.java | 12 +- .../stmt/choice/ChoiceStatementSupport.java | 10 +- .../stmt/config/ConfigStatementSupport.java | 10 +- .../config/EmptyConfigEffectiveStatement.java | 19 -- .../stmt/contact/ContactStatementSupport.java | 5 +- .../container/ContainerStatementSupport.java | 9 +- .../default_/DefaultStatementSupport.java | 4 +- .../stmt/leaf/LeafStatementSupport.java | 4 +- .../leaf_list/LeafListStatementSupport.java | 8 +- .../stmt/list/ListStatementSupport.java | 6 +- .../parser/spi/meta/EffectiveStmtCtx.java | 4 + 37 files changed, 372 insertions(+), 145 deletions(-) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/AbstractDataNodeContainer.java (97%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/ActionEffectiveStatementImpl.java (81%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/AugmentEffectiveStatementImpl.java (85%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/ChoiceEffectiveStatementImpl.java (86%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/ContainerEffectiveStatementImpl.java (90%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyAnydataEffectiveStatement.java (79%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyAnyxmlEffectiveStatement.java (77%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyBitEffectiveStatement.java (85%) create mode 100644 yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyConfigEffectiveStatement.java rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyContactEffectiveStatement.java (72%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_ => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyDefaultEffectiveStatement.java (72%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularAnydataEffectiveStatement.java (68%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularAnyxmlEffectiveStatement.java (67%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularBitEffectiveStatement.java (79%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularConfigEffectiveStatement.java (78%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularContactEffectiveStatement.java (78%) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_ => yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularDefaultEffectiveStatement.java (78%) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java diff --git a/yang/yang-model-ri/src/main/java/module-info.java b/yang/yang-model-ri/src/main/java/module-info.java index 5c8fe0b34a..3a6319abf1 100644 --- a/yang/yang-model-ri/src/main/java/module-info.java +++ b/yang/yang-model-ri/src/main/java/module-info.java @@ -13,6 +13,10 @@ module org.opendaylight.yangtools.yang.model.ri { exports org.opendaylight.yangtools.yang.model.ri.type; requires transitive org.opendaylight.yangtools.yang.model.api; - requires org.opendaylight.yangtools.yang.model.spi; requires com.google.common; + requires org.opendaylight.yangtools.yang.model.spi; + requires org.opendaylight.yangtools.concepts; + + // Annotations + requires static transitive org.eclipse.jdt.annotation; } diff --git a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java index 2d01293e54..1471789858 100644 --- a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java @@ -321,8 +321,8 @@ public final class DeclaredStatements { return substatements.isEmpty() ? createChoice(argument) : new RegularChoiceStatement(argument, substatements); } - public static ConfigStatement createConfig(final Boolean argument) { - return new EmptyConfigStatement(argument); + public static ConfigStatement createConfig(final boolean argument) { + return argument ? EmptyConfigStatement.TRUE : EmptyConfigStatement.FALSE; } public static ConfigStatement createConfig(final Boolean argument, diff --git a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java index 9c8519b8cb..c7c7f3aded 100644 --- a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java @@ -7,16 +7,47 @@ */ package org.opendaylight.yangtools.yang.model.ri.stmt; +import static com.google.common.base.Preconditions.checkArgument; + import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement; @@ -55,6 +86,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveSt import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; @@ -70,9 +102,19 @@ import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyRequireInstanceStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyStatusStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyYangVersionStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ActionEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AugmentEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ChoiceEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnydataEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnyxmlEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyArgumentEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBelongsToEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBitEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyConfigEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyContactEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDescriptionEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorAppTagEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorMessageEffectiveStatement; @@ -98,9 +140,15 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyValueEffectiv import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyWhenEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYinElementEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnydataEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnyxmlEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularArgumentEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBelongsToEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBitEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularConfigEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularContactEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDescriptionEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorAppTagEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorMessageEffectiveStatement; @@ -126,6 +174,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularValueEffect import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularWhenEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYinElementEffectiveStatement; +import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; /** * Static entry point to instantiating {@link EffectiveStatement} covered in the {@code RFC7950} metamodel. @@ -137,12 +186,71 @@ public final class EffectiveStatements { // Hidden on purpose } + public static ActionEffectiveStatement copyAction(final ActionEffectiveStatement original, final Immutable path, + final int flags) { + checkArgument(original instanceof ActionEffectiveStatementImpl, "Unsupported original %s", original); + return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, path, flags); + } + + public static ActionEffectiveStatement createAction(final ActionStatement declared, final Immutable path, + final int flags, final ImmutableList> substatements) + throws SubstatementIndexingException { + return new ActionEffectiveStatementImpl(declared, path, flags, substatements); + } + + public static AnydataEffectiveStatement copyAnydata(final AnydataEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnydataSchemaNode newOriginal) { + if (original instanceof RegularAnydataEffectiveStatement) { + return new RegularAnydataEffectiveStatement((RegularAnydataEffectiveStatement) original, path, flags, + newOriginal); + } else if (original instanceof EmptyAnydataEffectiveStatement) { + return new EmptyAnydataEffectiveStatement((EmptyAnydataEffectiveStatement) original, path, flags, + newOriginal); + } else { + throw new IllegalArgumentException("Unsupported original " + original); + } + } + + public static AnydataEffectiveStatement createAnydata(final AnydataStatement declared, final Immutable path, + final int flags, final ImmutableList> substatements, + final @Nullable AnydataSchemaNode original) { + return substatements.isEmpty() ? new EmptyAnydataEffectiveStatement(declared, path, flags, original) + : new RegularAnydataEffectiveStatement(declared, path, flags, original, substatements); + } + + public static AnyxmlEffectiveStatement copyAnyxml(final AnyxmlEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnyxmlSchemaNode newOriginal) { + if (original instanceof RegularAnyxmlEffectiveStatement) { + return new RegularAnyxmlEffectiveStatement((RegularAnyxmlEffectiveStatement) original, path, flags, + newOriginal); + } else if (original instanceof EmptyAnyxmlEffectiveStatement) { + return new EmptyAnyxmlEffectiveStatement((EmptyAnyxmlEffectiveStatement) original, path, flags, + newOriginal); + } else { + throw new IllegalArgumentException("Unsupported original " + original); + } + } + + public static AnyxmlEffectiveStatement createAnyxml(final AnyxmlStatement declared, final Immutable path, + final int flags, final ImmutableList> substatements, + final @Nullable AnyxmlSchemaNode original) { + return substatements.isEmpty() ? new EmptyAnyxmlEffectiveStatement(declared, path, flags, original) + : new RegularAnyxmlEffectiveStatement(declared, path, flags, original, substatements); + } + public static ArgumentEffectiveStatement createArgument(final ArgumentStatement declared, final ImmutableList> substatements) { return substatements.isEmpty() ? new EmptyArgumentEffectiveStatement(declared) : new RegularArgumentEffectiveStatement(declared, substatements); } + public static AugmentEffectiveStatement createAugment(final AugmentStatement declared, + final SchemaNodeIdentifier argument, final int flags, final QNameModule rootModuleQName, + final ImmutableList> substatements, + final @Nullable AugmentationSchemaNode original) throws SubstatementIndexingException { + return new AugmentEffectiveStatementImpl(declared, argument, flags, rootModuleQName, substatements, original); + } + public static BaseEffectiveStatement createBase(final BaseStatement declared, final ImmutableList> substatements) { return substatements.isEmpty() ? new EmptyBaseEffectiveStatement(declared) @@ -155,6 +263,66 @@ public final class EffectiveStatements { : new RegularBelongsToEffectiveStatement(declared, substatements); } + public static BitEffectiveStatement createBit(final BitStatement declared, + final ImmutableList> substatements) { + return substatements.isEmpty() ? new EmptyBitEffectiveStatement(declared) + : new RegularBitEffectiveStatement(declared, substatements); + } + + public static ChoiceEffectiveStatement copyChoice(final ChoiceEffectiveStatement original, + final Immutable path, final int flags, final @Nullable ChoiceSchemaNode orig) { + checkArgument(original instanceof ChoiceEffectiveStatementImpl, "Unsupported original %s", original); + return new ChoiceEffectiveStatementImpl((ChoiceEffectiveStatementImpl) original, path, flags, orig); + } + + public static ChoiceEffectiveStatement createChoice(final ChoiceStatement declared, final Immutable path, + final int flags, final ImmutableList> substatements, + final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) { + return new ChoiceEffectiveStatementImpl(declared, substatements, path, flags, defaultCase, original); + } + + public static ConfigEffectiveStatement createConfig(final boolean argument) { + return argument ? EmptyConfigEffectiveStatement.TRUE : EmptyConfigEffectiveStatement.FALSE; + } + + public static ConfigEffectiveStatement createConfig(final ConfigStatement declared) { + return new EmptyConfigEffectiveStatement(declared); + } + + public static ConfigEffectiveStatement createConfig(final ConfigStatement declared, + final ImmutableList> substatements) { + return substatements.isEmpty() ? createConfig(declared) + : new RegularConfigEffectiveStatement(declared, substatements); + } + + public static ContactEffectiveStatement createContact(final ContactStatement declared) { + return new EmptyContactEffectiveStatement(declared); + } + + public static ContactEffectiveStatement createContact(final ContactStatement declared, + final ImmutableList> substatements) { + return substatements.isEmpty() ? createContact(declared) + : new RegularContactEffectiveStatement(declared, substatements); + } + + public static ContainerEffectiveStatement copyContainer(final ContainerEffectiveStatement original, + final Immutable path, final int flags, final @Nullable ContainerSchemaNode orig) { + checkArgument(original instanceof ContainerEffectiveStatementImpl, "Unsupported original %s", original); + return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, path, flags, orig); + } + + public static ContainerEffectiveStatement createContainer(final ContainerStatement declared, final Immutable path, + final int flags, final ImmutableList> substatements, + final @Nullable ContainerSchemaNode original) { + return new ContainerEffectiveStatementImpl(declared, substatements, path, flags, original); + } + + public static DefaultEffectiveStatement createDefault(final DefaultStatement declared, + final ImmutableList> substatements) { + return substatements.isEmpty() ? new EmptyDefaultEffectiveStatement(declared) + : new RegularDefaultEffectiveStatement(declared, substatements); + } + public static DescriptionEffectiveStatement createDescription(final DescriptionStatement declared, final ImmutableList> substatements) { return substatements.isEmpty() ? new EmptyDescriptionEffectiveStatement(declared) diff --git a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyConfigStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyConfigStatement.java index 68d0d782c3..c852498b28 100644 --- a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyConfigStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyConfigStatement.java @@ -7,11 +7,15 @@ */ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.ArgumentToString; public final class EmptyConfigStatement extends ArgumentToString implements ConfigStatement { - public EmptyConfigStatement(final Boolean argument) { + public static final @NonNull EmptyConfigStatement FALSE = new EmptyConfigStatement(false); + public static final @NonNull EmptyConfigStatement TRUE = new EmptyConfigStatement(true); + + private EmptyConfigStatement(final boolean argument) { super(argument); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDataNodeContainer.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractDataNodeContainer.java similarity index 97% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDataNodeContainer.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractDataNodeContainer.java index 9b92c25412..caabdfff67 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDataNodeContainer.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractDataNodeContainer.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ActionEffectiveStatementImpl.java similarity index 81% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ActionEffectiveStatementImpl.java index a91d2caabb..a638d2361f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ActionEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -21,20 +21,22 @@ import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveS import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.CopyableMixin; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.OperationDefinitionMixin; -final class ActionEffectiveStatementImpl extends WithSubstatements +public final class ActionEffectiveStatementImpl + extends WithSubstatements implements ActionDefinition, ActionEffectiveStatement, OperationDefinitionMixin, CopyableMixin { private final @NonNull Immutable path; private final int flags; - ActionEffectiveStatementImpl(final ActionStatement declared, final Immutable path, final int flags, + public ActionEffectiveStatementImpl(final ActionStatement declared, final Immutable path, final int flags, final ImmutableList> substatements) { super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; } - ActionEffectiveStatementImpl(final ActionEffectiveStatementImpl original, final Immutable path, final int flags) { + public ActionEffectiveStatementImpl(final ActionEffectiveStatementImpl original, final Immutable path, + final int flags) { super(original); this.path = requireNonNull(path); this.flags = flags; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AugmentEffectiveStatementImpl.java similarity index 85% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AugmentEffectiveStatementImpl.java index 6d6b827340..f367214ae7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AugmentEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -24,9 +24,9 @@ import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.A import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DocumentedNodeMixin; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.NotificationNodeContainerMixin; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.WhenConditionMixin; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDataNodeContainer; -final class AugmentEffectiveStatementImpl extends AbstractDataNodeContainer +public final class AugmentEffectiveStatementImpl + extends AbstractDataNodeContainer implements AugmentEffectiveStatement, AugmentationSchemaNode, QNameModuleAware, DocumentedNodeMixin.WithStatus, ActionNodeContainerMixin, @@ -37,8 +37,9 @@ final class AugmentEffectiveStatementImpl extends AbstractDataNodeContainer> substatements, + public AugmentEffectiveStatementImpl(final AugmentStatement declared, final SchemaNodeIdentifier argument, + final int flags, final QNameModule rootModuleQName, + final ImmutableList> substatements, final @Nullable AugmentationSchemaNode original) { super(declared, substatements); this.argument = requireNonNull(argument); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ChoiceEffectiveStatementImpl.java similarity index 86% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ChoiceEffectiveStatementImpl.java index 143fb0f0b4..01500f8a47 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ChoiceEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -28,7 +28,8 @@ import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.A import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DataSchemaNodeMixin; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.MandatoryMixin; -final class ChoiceEffectiveStatementImpl extends WithSubstatements +public final class ChoiceEffectiveStatementImpl + extends WithSubstatements implements ChoiceEffectiveStatement, ChoiceSchemaNode, DerivableSchemaNode, DataSchemaNodeMixin, AugmentationTargetMixin, MandatoryMixin { @@ -37,9 +38,9 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements> substatements, final int flags, - final Immutable path, final @Nullable CaseSchemaNode defaultCase, + public ChoiceEffectiveStatementImpl(final ChoiceStatement declared, + final ImmutableList> substatements, final Immutable path, + final int flags, final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) { super(declared, substatements); this.path = requireNonNull(path); @@ -48,8 +49,8 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements implements ContainerEffectiveStatement, ContainerSchemaNode, DerivableSchemaNode, DataSchemaNodeMixin, DataNodeContainerMixin, @@ -47,17 +47,17 @@ final class ContainerEffectiveStatementImpl private final @NonNull Immutable path; private final @Nullable ContainerSchemaNode original; - ContainerEffectiveStatementImpl(final ContainerStatement declared, + public ContainerEffectiveStatementImpl(final ContainerStatement declared, final ImmutableList> substatements, final Immutable path, - final int flags, final ContainerSchemaNode original) { + final int flags, final @Nullable ContainerSchemaNode original) { super(declared, substatements); this.path = requireNonNull(path); this.original = original; this.flags = flags; } - ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective, final Immutable path, - final int flags, final ContainerSchemaNode original) { + public ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective, final Immutable path, + final int flags, final @Nullable ContainerSchemaNode original) { super(origEffective); this.path = requireNonNull(path); this.original = original; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnydataEffectiveStatement.java similarity index 79% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnydataEffectiveStatement.java index 648608ac50..34d5f2c22a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnydataEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -22,13 +22,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.Default; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin; -class EmptyAnydataEffectiveStatement extends Default +public class EmptyAnydataEffectiveStatement extends Default implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin { private final @NonNull Immutable path; private final AnydataSchemaNode original; private final int flags; - EmptyAnydataEffectiveStatement(final AnydataStatement declared, final Immutable path, final int flags, + public EmptyAnydataEffectiveStatement(final AnydataStatement declared, final Immutable path, final int flags, final @Nullable AnydataSchemaNode original) { super(declared); this.path = requireNonNull(path); @@ -36,6 +36,14 @@ class EmptyAnydataEffectiveStatement extends Default this.original = original; } + public EmptyAnydataEffectiveStatement(final EmptyAnydataEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnydataSchemaNode newOriginal) { + super(original); + this.path = requireNonNull(path); + this.flags = flags; + this.original = newOriginal; + } + @Override public final Immutable pathObject() { return path; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnyxmlEffectiveStatement.java similarity index 77% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnyxmlEffectiveStatement.java index 82506d9543..d1cab699ed 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyAnyxmlEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -21,13 +21,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.Default; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin; -class EmptyAnyxmlEffectiveStatement extends Default +public class EmptyAnyxmlEffectiveStatement extends Default implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin { private final @NonNull Immutable path; private final AnyxmlSchemaNode original; private final int flags; - EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Immutable path, final int flags, + public EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Immutable path, final int flags, final @Nullable AnyxmlSchemaNode original) { super(declared); this.path = requireNonNull(path); @@ -35,6 +35,14 @@ class EmptyAnyxmlEffectiveStatement extends Default this.original = original; } + public EmptyAnyxmlEffectiveStatement(final EmptyAnyxmlEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnyxmlSchemaNode newOriginal) { + super(original); + this.path = requireNonNull(path); + this.flags = flags; + this.original = newOriginal; + } + @Override public final Immutable pathObject() { return path; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBitEffectiveStatement.java similarity index 85% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBitEffectiveStatement.java index ecf1c6817c..4b604e95b5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBitEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; import org.opendaylight.yangtools.yang.model.api.Status; @@ -15,9 +15,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DocumentedNodeMixin; -class EmptyBitEffectiveStatement extends DefaultArgument implements +public class EmptyBitEffectiveStatement extends DefaultArgument implements BitEffectiveStatement, DocumentedNodeMixin, WithStatus { - EmptyBitEffectiveStatement(final BitStatement declared) { + public EmptyBitEffectiveStatement(final BitStatement declared) { super(declared); } diff --git a/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyConfigEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyConfigEffectiveStatement.java new file mode 100644 index 0000000000..1a37f7dea4 --- /dev/null +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyConfigEffectiveStatement.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; + +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyConfigStatement; +import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument; + +public final class EmptyConfigEffectiveStatement extends DefaultArgument + implements ConfigEffectiveStatement { + public static final @NonNull EmptyConfigEffectiveStatement FALSE = + new EmptyConfigEffectiveStatement(EmptyConfigStatement.FALSE); + public static final @NonNull EmptyConfigEffectiveStatement TRUE = + new EmptyConfigEffectiveStatement(EmptyConfigStatement.TRUE); + + public EmptyConfigEffectiveStatement(final ConfigStatement declared) { + super(declared); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/EmptyContactEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyContactEffectiveStatement.java similarity index 72% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/EmptyContactEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyContactEffectiveStatement.java index cb5e379a8f..8cbfb80e9e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/EmptyContactEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyContactEffectiveStatement.java @@ -5,15 +5,15 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.contact; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument; -final class EmptyContactEffectiveStatement extends DefaultArgument +public final class EmptyContactEffectiveStatement extends DefaultArgument implements ContactEffectiveStatement { - EmptyContactEffectiveStatement(final ContactStatement declared) { + public EmptyContactEffectiveStatement(final ContactStatement declared) { super(declared); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/EmptyDefaultEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyDefaultEffectiveStatement.java similarity index 72% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/EmptyDefaultEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyDefaultEffectiveStatement.java index 9d4e4d5d70..64cb8aee41 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/EmptyDefaultEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyDefaultEffectiveStatement.java @@ -5,15 +5,15 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.default_; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument; -final class EmptyDefaultEffectiveStatement extends DefaultArgument +public final class EmptyDefaultEffectiveStatement extends DefaultArgument implements DefaultEffectiveStatement { - EmptyDefaultEffectiveStatement(final DefaultStatement declared) { + public EmptyDefaultEffectiveStatement(final DefaultStatement declared) { super(declared); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/RegularAnydataEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnydataEffectiveStatement.java similarity index 68% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/RegularAnydataEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnydataEffectiveStatement.java index 08e88ffe28..3d26258a27 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/RegularAnydataEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnydataEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; @@ -18,16 +18,22 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; /** * YANG 1.1 AnyData effective statement implementation. */ -final class RegularAnydataEffectiveStatement extends EmptyAnydataEffectiveStatement { +public final class RegularAnydataEffectiveStatement extends EmptyAnydataEffectiveStatement { private final @NonNull Object substatements; - RegularAnydataEffectiveStatement(final AnydataStatement declared, final Immutable path, final int flags, + public RegularAnydataEffectiveStatement(final AnydataStatement declared, final Immutable path, final int flags, final @Nullable AnydataSchemaNode original, final ImmutableList> substatements) { super(declared, path, flags, original); this.substatements = maskList(substatements); } + public RegularAnydataEffectiveStatement(final RegularAnydataEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnydataSchemaNode newOriginal) { + super(original, path, flags, newOriginal); + this.substatements = original.substatements; + } + @Override public ImmutableList> effectiveSubstatements() { return unmaskList(substatements); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/RegularAnyxmlEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnyxmlEffectiveStatement.java similarity index 67% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/RegularAnyxmlEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnyxmlEffectiveStatement.java index 18b0d8b1fe..b11cb6edbc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/RegularAnyxmlEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularAnyxmlEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; @@ -15,16 +15,22 @@ import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; -final class RegularAnyxmlEffectiveStatement extends EmptyAnyxmlEffectiveStatement { +public final class RegularAnyxmlEffectiveStatement extends EmptyAnyxmlEffectiveStatement { private final @NonNull Object substatements; - RegularAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Immutable path, final int flags, + public RegularAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Immutable path, final int flags, final @Nullable AnyxmlSchemaNode original, final ImmutableList> substatements) { super(declared, path, flags, original); this.substatements = maskList(substatements); } + public RegularAnyxmlEffectiveStatement(final RegularAnyxmlEffectiveStatement original, final Immutable path, + final int flags, final @Nullable AnyxmlSchemaNode newOriginal) { + super(original, path, flags, newOriginal); + this.substatements = original.substatements; + } + @Override public ImmutableList> effectiveSubstatements() { return unmaskList(substatements); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBitEffectiveStatement.java similarity index 79% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBitEffectiveStatement.java index 5bb1139046..0d45ff3d62 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBitEffectiveStatement.java @@ -5,16 +5,16 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -final class RegularBitEffectiveStatement extends EmptyBitEffectiveStatement { +public final class RegularBitEffectiveStatement extends EmptyBitEffectiveStatement { private final Object substatements; - RegularBitEffectiveStatement(final BitStatement declared, + public RegularBitEffectiveStatement(final BitStatement declared, final ImmutableList> substatements) { super(declared); this.substatements = maskList(substatements); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/RegularConfigEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularConfigEffectiveStatement.java similarity index 78% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/RegularConfigEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularConfigEffectiveStatement.java index 5277284119..8feb3605a7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/RegularConfigEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularConfigEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -13,9 +13,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; -final class RegularConfigEffectiveStatement extends WithSubstatements +public final class RegularConfigEffectiveStatement extends WithSubstatements implements ConfigEffectiveStatement { - RegularConfigEffectiveStatement(final ConfigStatement declared, + public RegularConfigEffectiveStatement(final ConfigStatement declared, final ImmutableList> substatements) { super(declared, substatements); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/RegularContactEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularContactEffectiveStatement.java similarity index 78% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/RegularContactEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularContactEffectiveStatement.java index 9daa737b25..d1821ddc66 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/RegularContactEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularContactEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.contact; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -13,9 +13,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; -final class RegularContactEffectiveStatement extends WithSubstatements +public final class RegularContactEffectiveStatement extends WithSubstatements implements ContactEffectiveStatement { - RegularContactEffectiveStatement(final ContactStatement declared, + public RegularContactEffectiveStatement(final ContactStatement declared, final ImmutableList> substatements) { super(declared, substatements); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/RegularDefaultEffectiveStatement.java b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularDefaultEffectiveStatement.java similarity index 78% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/RegularDefaultEffectiveStatement.java rename to yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularDefaultEffectiveStatement.java index 8bdb87a34c..026221b6ef 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/RegularDefaultEffectiveStatement.java +++ b/yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularDefaultEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.default_; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -13,9 +13,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; -final class RegularDefaultEffectiveStatement extends WithSubstatements +public final class RegularDefaultEffectiveStatement extends WithSubstatements implements DefaultEffectiveStatement { - RegularDefaultEffectiveStatement(final DefaultStatement declared, + public RegularDefaultEffectiveStatement(final DefaultStatement declared, final ImmutableList> substatements) { super(declared, substatements); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index dc22c26325..8b4fe0aafc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementSupport; @@ -114,7 +115,7 @@ public final class ActionStatementSupport extends verify(!substatements.isEmpty(), "Missing implicit input/output statements at %s", ref); try { - return new ActionEffectiveStatementImpl(stmt.declared(), stmt.effectivePath(), + return EffectiveStatements.createAction(stmt.declared(), stmt.effectivePath(), EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), substatements); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); @@ -124,7 +125,7 @@ public final class ActionStatementSupport extends @Override public ActionEffectiveStatement copyEffective(final Current stmt, final ActionEffectiveStatement original) { - return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, stmt.effectivePath(), + return EffectiveStatements.copyAction(original, stmt.effectivePath(), EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements())); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java index b1493634f2..ae015292ad 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.concepts.Immutable; +import java.util.Collection; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode; import org.opendaylight.yangtools.yang.model.api.Status; @@ -21,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -69,20 +69,24 @@ public final class AnydataStatementSupport @Override protected AnydataEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - final int flags = new FlagsBuilder() + return EffectiveStatements.createAnydata(stmt.declared(), stmt.effectivePath(), + createFlags(stmt, substatements), substatements, stmt.original(AnydataSchemaNode.class)); + } + + @Override + public AnydataEffectiveStatement copyEffective(final Current stmt, + final AnydataEffectiveStatement original) { + return EffectiveStatements.copyAnydata(original, stmt.effectivePath(), + createFlags(stmt, original.effectiveSubstatements()), stmt.original(AnydataSchemaNode.class)); + } + + private static int createFlags(final Current stmt, + final Collection> substatements) { + return new FlagsBuilder() .setHistory(stmt.history()) .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) .setConfiguration(stmt.effectiveConfig().asNullable()) .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE)) .toFlags(); - final Immutable path = stmt.effectivePath(); - - return substatements.isEmpty() - ? new EmptyAnydataEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt)) - : new RegularAnydataEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt), substatements); - } - - private static @Nullable AnydataSchemaNode findOriginal(final Current stmt) { - return (AnydataSchemaNode) stmt.original(); } -} \ No newline at end of file +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java index c0dc283a25..ced8f5e611 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.concepts.Immutable; +import java.util.Collection; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.Status; @@ -21,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -69,20 +69,24 @@ public final class AnyxmlStatementSupport @Override protected AnyxmlEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - final int flags = new FlagsBuilder() + return EffectiveStatements.createAnyxml(stmt.declared(), stmt.effectivePath(), createFlags(stmt, substatements), + substatements, stmt.original(AnyxmlSchemaNode.class)); + } + + @Override + public AnyxmlEffectiveStatement copyEffective(final Current stmt, + final AnyxmlEffectiveStatement original) { + return EffectiveStatements.copyAnyxml(original, stmt.effectivePath(), + createFlags(stmt, original.effectiveSubstatements()), stmt.original(AnyxmlSchemaNode.class)); + } + + private static int createFlags(final Current stmt, + final Collection> substatements) { + return new FlagsBuilder() .setHistory(stmt.history()) .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) .setConfiguration(stmt.effectiveConfig().asNullable()) .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE)) .toFlags(); - final Immutable path = stmt.effectivePath(); - - return substatements.isEmpty() - ? new EmptyAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt)) - : new RegularAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt), substatements); - } - - private static @Nullable AnyxmlSchemaNode findOriginal(final Current stmt) { - return (AnyxmlSchemaNode) stmt.original(); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java index 797cd04bbc..83101786e4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Desce import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; @@ -140,8 +141,8 @@ abstract class AbstractAugmentStatementSupport .toFlags(); try { - return new AugmentEffectiveStatementImpl(stmt.declared(), stmt.getArgument(), flags, - stmt.moduleName().getModule(), substatements, (AugmentationSchemaNode) stmt.original()); + return EffectiveStatements.createAugment(stmt.declared(), stmt.getArgument(), flags, + stmt.moduleName().getModule(), substatements, stmt.original(AugmentationSchemaNode.class)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementSupport.java index 43669740af..3e1041202b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementSupport.java @@ -18,6 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -82,7 +83,6 @@ public final class BitStatementSupport extends AbstractStatementSupport stmt, final ImmutableList> substatements) { - return substatements.isEmpty() ? new EmptyBitEffectiveStatement(stmt.declared()) - : new RegularBitEffectiveStatement(stmt.declared(), substatements); + return EffectiveStatements.createBit(stmt.declared(), substatements); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementSupport.java index 62f01890e9..8fdf768396 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementSupport.java @@ -122,14 +122,14 @@ public final class CaseStatementSupport protected CaseEffectiveStatement copyDeclaredEffective(final Current stmt, final CaseEffectiveStatement original) { return new DeclaredCaseEffectiveStatement((DeclaredCaseEffectiveStatement) original, stmt.effectivePath(), - computeFlags(stmt, original.effectiveSubstatements()), findOriginal(stmt)); + computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class)); } @Override protected CaseEffectiveStatement copyUndeclaredEffective(final Current stmt, final CaseEffectiveStatement original) { return new UndeclaredCaseEffectiveStatement((UndeclaredCaseEffectiveStatement) original, stmt.effectivePath(), - computeFlags(stmt, original.effectiveSubstatements()),findOriginal(stmt)); + computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class)); } @Override @@ -137,7 +137,7 @@ public final class CaseStatementSupport final ImmutableList> substatements) { try { return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, stmt.effectivePath(), - computeFlags(stmt, substatements), findOriginal(stmt)); + computeFlags(stmt, substatements), stmt.original(CaseSchemaNode.class)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } @@ -148,16 +148,12 @@ public final class CaseStatementSupport final ImmutableList> substatements) { try { return new UndeclaredCaseEffectiveStatement(substatements, stmt.effectivePath(), - computeFlags(stmt, substatements), findOriginal(stmt)); + computeFlags(stmt, substatements), stmt.original(CaseSchemaNode.class)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } } - private static @Nullable CaseSchemaNode findOriginal(final Current stmt) { - return (CaseSchemaNode) stmt.original(); - } - private static int computeFlags(final Current stmt, final Collection> substatements) { final Boolean config; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementSupport.java index ceb3fff819..48449760d1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementSupport.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; @@ -126,9 +127,8 @@ public final class ChoiceStatementSupport @Override public ChoiceEffectiveStatement copyEffective(final Current stmt, final ChoiceEffectiveStatement original) { - return new ChoiceEffectiveStatementImpl((ChoiceEffectiveStatementImpl) original, - computeFlags(stmt, original.effectiveSubstatements()), stmt.effectivePath(), - (ChoiceSchemaNode) stmt.original()); + return EffectiveStatements.copyChoice(original, stmt.effectivePath(), + computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ChoiceSchemaNode.class)); } @Override @@ -152,8 +152,8 @@ public final class ChoiceStatementSupport } try { - return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, computeFlags(stmt, substatements), - stmt.effectivePath(), defaultCase, (ChoiceSchemaNode) stmt.original()); + return EffectiveStatements.createChoice(stmt.declared(), stmt.effectivePath(), + computeFlags(stmt, substatements), substatements, defaultCase, stmt.original(ChoiceSchemaNode.class)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java index cf74d9f57b..e007e6f44e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -26,8 +27,7 @@ public final class ConfigStatementSupport private ConfigStatementSupport() { super(YangStmtMapping.CONFIG, - new EmptyConfigEffectiveStatement(DeclaredStatements.createConfig(Boolean.FALSE)), - new EmptyConfigEffectiveStatement(DeclaredStatements.createConfig(Boolean.TRUE)), + EffectiveStatements.createConfig(false), EffectiveStatements.createConfig(true), // FIXME: This is not quite true. If we are instantiated in a context which ignores config, which should // really fizzle. This needs some more analysis. StatementPolicy.contextIndependent()); @@ -51,11 +51,11 @@ public final class ConfigStatementSupport @Override protected ConfigEffectiveStatement createEffective(final ConfigStatement declared, final ImmutableList> substatements) { - return new RegularConfigEffectiveStatement(declared, substatements); + return EffectiveStatements.createConfig(declared, substatements); } @Override - protected EmptyConfigEffectiveStatement createEmptyEffective(final ConfigStatement declared) { - return new EmptyConfigEffectiveStatement(declared); + protected ConfigEffectiveStatement createEmptyEffective(final ConfigStatement declared) { + return EffectiveStatements.createConfig(declared); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java deleted file mode 100644 index 2f4656ed4c..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config; - -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument; - -final class EmptyConfigEffectiveStatement extends DefaultArgument - implements ConfigEffectiveStatement { - EmptyConfigEffectiveStatement(final ConfigStatement declared) { - super(declared); - } -} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java index 5c2369b36f..b8123b79ae 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -50,11 +51,11 @@ public final class ContactStatementSupport @Override protected ContactEffectiveStatement createEffective(final ContactStatement declared, final ImmutableList> substatements) { - return new RegularContactEffectiveStatement(declared, substatements); + return EffectiveStatements.createContact(declared, substatements); } @Override protected ContactEffectiveStatement createEmptyEffective(final ContactStatement declared) { - return new EmptyContactEffectiveStatement(declared); + return EffectiveStatements.createContact(declared); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java index 47133fb30f..6cde3f7278 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java @@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; @@ -120,8 +121,8 @@ public final class ContainerStatementSupport EffectiveStmtUtils.checkUniqueUses(stmt, substatements); try { - return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, stmt.effectivePath(), - createFlags(stmt, substatements), (ContainerSchemaNode) stmt.original()); + return EffectiveStatements.createContainer(stmt.declared(), stmt.effectivePath(), + createFlags(stmt, substatements), substatements, stmt.original(ContainerSchemaNode.class)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } @@ -130,8 +131,8 @@ public final class ContainerStatementSupport @Override public ContainerEffectiveStatement copyEffective(final Current stmt, final ContainerEffectiveStatement original) { - return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, stmt.effectivePath(), - createFlags(stmt, original.effectiveSubstatements()), (ContainerSchemaNode) stmt.original()); + return EffectiveStatements.copyContainer(original, stmt.effectivePath(), + createFlags(stmt, original.effectiveSubstatements()), stmt.original(ContainerSchemaNode.class)); } private static int createFlags(final Current stmt, diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java index 5592ddbae4..85b1d063c9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -53,7 +54,6 @@ public final class DefaultStatementSupport @Override protected DefaultEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - return substatements.isEmpty() ? new EmptyDefaultEffectiveStatement(stmt.declared()) - : new RegularDefaultEffectiveStatement(stmt.declared(), substatements); + return EffectiveStatements.createDefault(stmt.declared(), substatements); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java index 26e9c2c642..e46e5a2ffa 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java @@ -84,7 +84,7 @@ public final class LeafStatementSupport public LeafEffectiveStatement copyEffective(final Current stmt, final LeafEffectiveStatement original) { return new RegularLeafEffectiveStatement((AbstractLeafEffectiveStatement) original, stmt.effectivePath(), - computeFlags(stmt, original.effectiveSubstatements()), (LeafSchemaNode) stmt.original()); + computeFlags(stmt, original.effectiveSubstatements()), stmt.original(LeafSchemaNode.class)); } @Override @@ -98,7 +98,7 @@ public final class LeafStatementSupport EffectiveStmtUtils.hasDefaultValueMarkedWithIfFeature(stmt.yangVersion(), typeStmt, dflt), stmt, "Leaf '%s' has default value '%s' marked with an if-feature statement.", stmt.argument(), dflt); - final LeafSchemaNode original = (LeafSchemaNode) stmt.original(); + final LeafSchemaNode original = stmt.original(LeafSchemaNode.class); final int flags = computeFlags(stmt, substatements); final LeafStatement declared = stmt.declared(); return original == null ? new EmptyLeafEffectiveStatement(declared, stmt.effectivePath(), flags, substatements) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java index b587d5327b..3fd09a8d29 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java @@ -111,14 +111,14 @@ public final class LeafListStatementSupport final int flags = computeFlags(stmt, original.effectiveSubstatements()); if (original instanceof RegularLeafListEffectiveStatement) { return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original, - (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags); + stmt.original(LeafListSchemaNode.class), stmt.effectivePath(), flags); } else if (original instanceof SlimLeafListEffectiveStatement) { return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original, - (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags); + stmt.original(LeafListSchemaNode.class), stmt.effectivePath(), flags); } else if (original instanceof EmptyLeafListEffectiveStatement) { // Promote to slim return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original, - (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags); + stmt.original(LeafListSchemaNode.class), stmt.effectivePath(), flags); } else { // Safe fallback return super.copyEffective(stmt, original); @@ -150,7 +150,7 @@ public final class LeafListStatementSupport final Optional elementCountConstraint = EffectiveStmtUtils.createElementCountConstraint(substatements); - final LeafListSchemaNode original = (LeafListSchemaNode) stmt.original(); + final LeafListSchemaNode original = stmt.original(LeafListSchemaNode.class); final LeafListStatement declared = stmt.declared(); if (defaultValues.isEmpty()) { return original == null && !elementCountConstraint.isPresent() diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java index 5b8c8d822d..d8ae375a41 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java @@ -150,10 +150,10 @@ public final class ListStatementSupport final int flags = computeFlags(stmt, original.effectiveSubstatements()); if (original instanceof RegularListEffectiveStatement) { return new RegularListEffectiveStatement((RegularListEffectiveStatement) original, - (ListSchemaNode) stmt.original(), stmt.effectivePath(), flags); + stmt.original(ListSchemaNode.class), stmt.effectivePath(), flags); } else if (original instanceof EmptyListEffectiveStatement) { return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original, - (ListSchemaNode) stmt.original(), stmt.effectivePath(), flags); + stmt.original(ListSchemaNode.class), stmt.effectivePath(), flags); } else { // Safe fallback return super.copyEffective(stmt, original); @@ -198,7 +198,7 @@ public final class ListStatementSupport final Optional elementCountConstraint = EffectiveStmtUtils.createElementCountConstraint(substatements); final Immutable path = stmt.effectivePath(); - final ListSchemaNode original = (ListSchemaNode) stmt.original(); + final ListSchemaNode original = stmt.original(ListSchemaNode.class); try { return original == null && !elementCountConstraint.isPresent() ? new EmptyListEffectiveStatement(stmt.declared(), path, flags, substatements, keyDefinition) diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java index 6901551f20..82ce9bcd4b 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java @@ -165,6 +165,10 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu @Nullable EffectiveStatement original(); + default @Nullable T original(final @NonNull Class type) { + return type.cast(original()); + } + // FIXME: 7.0.0: this method should be moved to stmt.type in some shape or form @NonNull QName argumentAsTypeQName(); -- 2.36.6