From dbd18f394e36f2b49af0a932f897b282779442c0 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 10 Aug 2020 17:33:42 +0200 Subject: [PATCH] Refactor AbstractEffectiveDocumentedNodeWithStatus This is the final vestige of custom-built statements, make sure to switch it over to require pre-built substatements. This forces extensions to adopt BaseStatementSupport et al., which is actually a good thing. JIRA: YANGTOOLS-1123 Change-Id: Ib1debecae8d2dbb474cb1c8aa34f05d0e1a3ecad Signed-off-by: Robert Varga --- ...nyxmlSchemaLocationEffectiveStatement.java | 8 +- .../api/AnyxmlSchemaLocationStatement.java | 6 +- ...lSchemaLocationEffectiveStatementImpl.java | 7 +- .../AnyxmlSchemaLocationStatementImpl.java | 16 ++-- .../AnyxmlSchemaLocationStatementSupport.java | 37 ++++++--- .../model/api/OpenConfigVersionStatement.java | 6 +- .../AbstractHashedValueStatementSupport.java | 63 ++++++++++----- .../GetFilterElementAttributesStatement.java | 6 +- ...lterElementAttributesStatementSupport.java | 73 ++++++++++------- .../api/DefaultDenyAllEffectiveStatement.java | 6 +- .../model/api/DefaultDenyAllStatement.java | 6 +- .../DefaultDenyWriteEffectiveStatement.java | 6 +- .../model/api/DefaultDenyWriteStatement.java | 6 +- .../DefaultDenyAllStatementSupport.java | 57 +++++++++----- .../DefaultDenyWriteStatementSupport.java | 55 ++++++++----- .../api/AnnotationEffectiveStatement.java | 6 +- .../model/api/AnnotationStatement.java | 8 +- .../parser/AnnotationStatementSupport.java | 62 +++++++++------ .../model/api/YangDataEffectiveStatement.java | 5 ++ .../rfc8040/model/api/YangDataStatement.java | 6 +- .../YangDataEffectiveStatementImpl.java | 7 +- .../parser/YangDataStatementSupport.java | 78 ++++++++++--------- .../api/MountPointEffectiveStatement.java | 6 +- .../model/api/MountPointStatement.java | 8 +- .../parser/MountPointStatementSupport.java | 61 +++++++++------ ...enConfigVersionEffectiveStatementImpl.java | 7 +- .../stmt/OpenConfigVersionStatementImpl.java | 12 +-- .../stmt/OpenConfigVersionSupport.java | 39 +++++++--- .../stmt/AbstractDeclaredStatement.java | 25 ++++++ ...ractEffectiveDocumentedNodeWithStatus.java | 9 ++- .../stmt/BaseVoidStatementSupport.java | 27 +++++++ .../stmt/UnknownEffectiveStatementBase.java | 6 +- .../UnrecognizedEffectiveStatementImpl.java | 7 +- .../extension/UnrecognizedStatementImpl.java | 21 ++++- .../UnrecognizedStatementSupport.java | 55 ++++++++----- ...dPartyExtensionEffectiveStatementImpl.java | 7 +- .../plugin/ThirdPartyExtensionStatement.java | 6 +- .../ThirdPartyExtensionStatementImpl.java | 13 ++-- .../plugin/ThirdPartyExtensionSupport.java | 48 ++++++++---- 39 files changed, 605 insertions(+), 282 deletions(-) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseVoidStatementSupport.java diff --git a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationEffectiveStatement.java b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationEffectiveStatement.java index 5ec164987a..8c3371d774 100644 --- a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationEffectiveStatement.java +++ b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationEffectiveStatement.java @@ -9,10 +9,14 @@ package org.opendaylight.yangtools.odlext.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; @Beta public interface AnyxmlSchemaLocationEffectiveStatement - extends EffectiveStatement { - + extends EffectiveStatement { + @Override + default StatementDefinition statementDefinition() { + return OpenDaylightExtensionsStatements.ANYXML_SCHEMA_LOCATION; + } } diff --git a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationStatement.java b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationStatement.java index 62f9c1c4c9..d1d8fc00e0 100644 --- a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationStatement.java +++ b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AnyxmlSchemaLocationStatement.java @@ -8,10 +8,14 @@ package org.opendaylight.yangtools.odlext.model.api; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; @Beta public interface AnyxmlSchemaLocationStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return OpenDaylightExtensionsStatements.ANYXML_SCHEMA_LOCATION; + } } diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java index 6e085828db..f42a117a94 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java @@ -8,11 +8,13 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -25,8 +27,9 @@ public final class AnyxmlSchemaLocationEffectiveStatementImpl private final @NonNull SchemaPath path; AnyxmlSchemaLocationEffectiveStatementImpl( - final StmtContext ctx) { - super(ctx); + final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); } diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementImpl.java index ec7d4f8944..1573187e10 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementImpl.java @@ -7,20 +7,18 @@ */ package org.opendaylight.yangtools.odlext.parser; +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -final class AnyxmlSchemaLocationStatementImpl extends AbstractDeclaredStatement +final class AnyxmlSchemaLocationStatementImpl extends WithSubstatements implements AnyxmlSchemaLocationStatement { AnyxmlSchemaLocationStatementImpl( - final StmtContext context) { - super(context); - } - - @Override - public SchemaNodeIdentifier getArgument() { - return argument(); + final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); } } diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java index 2a0f22dff4..a0d7375223 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java @@ -9,18 +9,21 @@ package org.opendaylight.yangtools.odlext.parser; import static org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements.ANYXML_SCHEMA_LOCATION; +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class AnyxmlSchemaLocationStatementSupport - extends AbstractStatementSupport { private static final AnyxmlSchemaLocationStatementSupport INSTANCE = new AnyxmlSchemaLocationStatementSupport(ANYXML_SCHEMA_LOCATION); @@ -49,19 +52,35 @@ public final class AnyxmlSchemaLocationStatementSupport } @Override - public AnyxmlSchemaLocationStatement createDeclared( + protected SubstatementValidator getSubstatementValidator() { + return validator; + } + + @Override + protected AnyxmlSchemaLocationStatement createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return new AnyxmlSchemaLocationStatementImpl(ctx, substatements); + } + + @Override + protected AnyxmlSchemaLocationStatement createEmptyDeclared( final StmtContext ctx) { - return new AnyxmlSchemaLocationStatementImpl(ctx); + return createDeclared(ctx, ImmutableList.of()); } @Override - public AnyxmlSchemaLocationEffectiveStatement createEffective(final StmtContext ctx) { - return new AnyxmlSchemaLocationEffectiveStatementImpl(ctx); + protected AnyxmlSchemaLocationEffectiveStatement createEffective( + final StmtContext ctx, final AnyxmlSchemaLocationStatement declared, + final ImmutableList> substatements) { + return new AnyxmlSchemaLocationEffectiveStatementImpl(ctx, substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected AnyxmlSchemaLocationEffectiveStatement createEmptyEffective( + final StmtContext ctx, final AnyxmlSchemaLocationStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } } \ No newline at end of file diff --git a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionStatement.java b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionStatement.java index 2db4f4e8ba..bc1cafb3b7 100644 --- a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionStatement.java +++ b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionStatement.java @@ -9,9 +9,13 @@ package org.opendaylight.yangtools.openconfig.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.concepts.SemVer; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; @Beta public interface OpenConfigVersionStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return OpenConfigStatements.OPENCONFIG_VERSION; + } } diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java index 1efe79ff43..c71fd92ec7 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java @@ -7,30 +7,38 @@ */ package org.opendaylight.yangtools.openconfig.parser; +import static java.util.Objects.requireNonNull; + +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; abstract class AbstractHashedValueStatementSupport - extends AbstractVoidStatementSupport { + extends BaseVoidStatementSupport { + + private static final class Declared extends WithSubstatements implements OpenConfigHashedValueStatement { + private final @NonNull StatementDefinition definition; - private static final class Declared extends AbstractDeclaredStatement - implements OpenConfigHashedValueStatement { - Declared(final StmtContext context) { - super(context); + Declared(final StatementDefinition definition, + final ImmutableList> substatements) { + super(substatements); + this.definition = requireNonNull(definition); } @Override - public Void getArgument() { - return null; + public StatementDefinition statementDefinition() { + return definition; } } @@ -40,8 +48,9 @@ abstract class AbstractHashedValueStatementSupport private final SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } @@ -66,19 +75,35 @@ abstract class AbstractHashedValueStatementSupport } @Override - public final OpenConfigHashedValueStatement createDeclared( + protected final SubstatementValidator getSubstatementValidator() { + return validator; + } + + @Override + protected final OpenConfigHashedValueStatement createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(getPublicView(), substatements); + } + + @Override + protected final OpenConfigHashedValueStatement createEmptyDeclared( final StmtContext ctx) { - return new Declared(ctx); + return createDeclared(ctx, ImmutableList.of()); } @Override - public final OpenConfigHashedValueEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); + protected final OpenConfigHashedValueEffectiveStatement createEffective( + final StmtContext ctx, + final OpenConfigHashedValueStatement declared, + final ImmutableList> substatements) { + return new Effective(ctx, substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected final OpenConfigHashedValueEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final OpenConfigHashedValueStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } } diff --git a/yang/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/GetFilterElementAttributesStatement.java b/yang/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/GetFilterElementAttributesStatement.java index 6d3a6a3a8b..d69f200bf2 100644 --- a/yang/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/GetFilterElementAttributesStatement.java +++ b/yang/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/GetFilterElementAttributesStatement.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.rfc6241.model.api; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; /** @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface GetFilterElementAttributesStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES; + } } diff --git a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java index 5d48143353..92fa12798d 100644 --- a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java +++ b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.rfc6241.parser; import com.google.common.annotations.Beta; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement; import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesSchemaNode; @@ -16,10 +17,12 @@ import org.opendaylight.yangtools.rfc6241.model.api.NetconfStatements; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -27,19 +30,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Beta -public final class GetFilterElementAttributesStatementSupport - extends AbstractVoidStatementSupport { - - private static final class Declared extends AbstractDeclaredStatement - implements GetFilterElementAttributesStatement { - Declared(final StmtContext context) { - super(context); - } +public final class GetFilterElementAttributesStatementSupport extends BaseVoidStatementSupport< + GetFilterElementAttributesStatement, GetFilterElementAttributesEffectiveStatement> { - @Override - public Void getArgument() { - return null; + private static final class Declared extends WithSubstatements implements GetFilterElementAttributesStatement { + static final @NonNull Declared EMPTY = new Declared(ImmutableList.of()); + + Declared(final ImmutableList> substatements) { + super(substatements); } } @@ -48,8 +46,9 @@ public final class GetFilterElementAttributesStatementSupport implements GetFilterElementAttributesEffectiveStatement, GetFilterElementAttributesSchemaNode { private final @NonNull SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } @@ -82,27 +81,45 @@ public final class GetFilterElementAttributesStatementSupport } @Override - public GetFilterElementAttributesStatement createDeclared( - final StmtContext ctx) { - return new Declared(ctx); + public void onFullDefinitionDeclared(final Mutable stmt) { + super.onFullDefinitionDeclared(stmt); + stmt.setIsSupportedToBuildEffective(computeSupported(stmt)); } @Override - public GetFilterElementAttributesEffectiveStatement createEffective(final StmtContext ctx) { - return new Effective(ctx); + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected GetFilterElementAttributesStatement createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(substatements); } @Override - public void onFullDefinitionDeclared(final Mutable stmt) { - super.onFullDefinitionDeclared(stmt); - stmt.setIsSupportedToBuildEffective(computeSupported(stmt)); + protected GetFilterElementAttributesStatement createEmptyDeclared( + final StmtContext ctx) { + return Declared.EMPTY; + } + + @Override + protected GetFilterElementAttributesEffectiveStatement createEffective( + final StmtContext ctx, + final GetFilterElementAttributesStatement declared, + final ImmutableList> substatements) { + return new Effective(ctx, substatements); + } + + @Override + protected GetFilterElementAttributesEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final GetFilterElementAttributesStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } private static boolean computeSupported(final StmtContext stmt) { diff --git a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllEffectiveStatement.java b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllEffectiveStatement.java index 4982510eaf..f386bcc68b 100644 --- a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllEffectiveStatement.java +++ b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllEffectiveStatement.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc6536.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; /** * Effective statement representation of 'default-deny-all' extension defined in @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; */ @Beta public interface DefaultDenyAllEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return NACMStatements.DEFAULT_DENY_ALL; + } } diff --git a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllStatement.java b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllStatement.java index 7bab5ef519..1be4602731 100644 --- a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllStatement.java +++ b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyAllStatement.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.rfc6536.model.api; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; /** @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface DefaultDenyAllStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return NACMStatements.DEFAULT_DENY_ALL; + } } diff --git a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteEffectiveStatement.java b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteEffectiveStatement.java index bd19179fce..6e749fdfbe 100644 --- a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteEffectiveStatement.java +++ b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteEffectiveStatement.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc6536.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; /** * Effective statement representation of 'default-deny-write' extension defined in @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; */ @Beta public interface DefaultDenyWriteEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return NACMStatements.DEFAULT_DENY_WRITE; + } } diff --git a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteStatement.java b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteStatement.java index 9fd65e1c11..856dc8f34e 100644 --- a/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteStatement.java +++ b/yang/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/DefaultDenyWriteStatement.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.rfc6536.model.api; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; /** @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface DefaultDenyWriteStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return NACMStatements.DEFAULT_DENY_WRITE; + } } diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java index 32c301c3ef..ae88222e07 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.rfc6536.parser; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllEffectiveStatement; import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllSchemaNode; @@ -14,24 +15,22 @@ import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement; import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class DefaultDenyAllStatementSupport - extends AbstractVoidStatementSupport { + extends BaseVoidStatementSupport { + private static final class Declared extends WithSubstatements implements DefaultDenyAllStatement { + static final @NonNull Declared EMPTY = new Declared(ImmutableList.of()); - private static final class Declared extends AbstractDeclaredStatement implements DefaultDenyAllStatement { - Declared(final StmtContext context) { - super(context); - } - - @Override - public Void getArgument() { - return null; + Declared(final ImmutableList> substatements) { + super(substatements); } } @@ -39,8 +38,9 @@ public final class DefaultDenyAllStatementSupport implements DefaultDenyAllEffectiveStatement, DefaultDenyAllSchemaNode { private final @NonNull SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } @@ -63,7 +63,7 @@ public final class DefaultDenyAllStatementSupport private final SubstatementValidator validator; private DefaultDenyAllStatementSupport(final StatementDefinition definition) { - super(definition, CopyPolicy.CONTEXT_INDEPENDENT); + super(definition); this.validator = SubstatementValidator.builder(definition).build(); } @@ -72,18 +72,33 @@ public final class DefaultDenyAllStatementSupport } @Override - public DefaultDenyAllStatement createDeclared(final StmtContext ctx) { - return new Declared(ctx); + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - public DefaultDenyAllEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); + protected DefaultDenyAllStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected DefaultDenyAllStatement createEmptyDeclared(final StmtContext ctx) { + return Declared.EMPTY; + } + + @Override + protected DefaultDenyAllEffectiveStatement createEffective( + final StmtContext ctx, + final DefaultDenyAllStatement declared, + final ImmutableList> substatements) { + return new Effective(ctx, substatements); + } + + @Override + protected DefaultDenyAllEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final DefaultDenyAllStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } } diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java index d7f97ca074..a3a9400668 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.rfc6536.parser; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement; import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode; @@ -14,24 +15,22 @@ import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement; import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractVoidStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class DefaultDenyWriteStatementSupport - extends AbstractVoidStatementSupport { + extends BaseVoidStatementSupport { + private static final class Declared extends WithSubstatements implements DefaultDenyWriteStatement { + static final @NonNull Declared EMPTY = new Declared(ImmutableList.of()); - private static final class Declared extends AbstractDeclaredStatement implements DefaultDenyWriteStatement { - Declared(final StmtContext context) { - super(context); - } - - @Override - public Void getArgument() { - return null; + Declared(final ImmutableList> substatements) { + super(substatements); } } @@ -39,8 +38,9 @@ public final class DefaultDenyWriteStatementSupport implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode { private final @NonNull SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } @@ -72,18 +72,33 @@ public final class DefaultDenyWriteStatementSupport } @Override - public DefaultDenyWriteStatement createDeclared(final StmtContext ctx) { - return new Declared(ctx); + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - public DefaultDenyWriteEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); + protected DefaultDenyWriteStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected DefaultDenyWriteStatement createEmptyDeclared(final StmtContext ctx) { + return Declared.EMPTY; + } + + @Override + protected DefaultDenyWriteEffectiveStatement createEffective( + final StmtContext ctx, + final DefaultDenyWriteStatement declared, + final ImmutableList> substatements) { + return new Effective(ctx, substatements); + } + + @Override + protected DefaultDenyWriteEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final DefaultDenyWriteStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } } diff --git a/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationEffectiveStatement.java b/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationEffectiveStatement.java index 86d9e4fb2c..fd0a5c5ebb 100644 --- a/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationEffectiveStatement.java +++ b/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationEffectiveStatement.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.rfc7952.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware; /** @@ -19,5 +20,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware; @Beta public interface AnnotationEffectiveStatement extends EffectiveStatement, TypeDefinitionAware { - + @Override + default StatementDefinition statementDefinition() { + return MetadataStatements.ANNOTATION; + } } diff --git a/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationStatement.java b/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationStatement.java index 303b1f701e..333e285331 100644 --- a/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationStatement.java +++ b/yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/AnnotationStatement.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc7952.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.DocumentedDeclaredStatement.WithStatus; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureAwareDeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeAwareDeclaredStatement; @@ -20,6 +21,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface AnnotationStatement extends UnknownStatement, WithStatus, - IfFeatureAwareDeclaredStatement, TypeAwareDeclaredStatement { - + IfFeatureAwareDeclaredStatement, TypeAwareDeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return MetadataStatements.ANNOTATION; + } } diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java index 28c851c721..9ce4521c93 100644 --- a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java +++ b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.rfc7952.parser; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationEffectiveStatement; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode; @@ -16,14 +17,16 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; @@ -31,16 +34,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class AnnotationStatementSupport - extends AbstractStatementSupport { + extends BaseStatementSupport { - private static final class Declared extends AbstractDeclaredStatement implements AnnotationStatement { - Declared(final StmtContext context) { - super(context); - } - - @Override - public QName getArgument() { - return argument(); + private static final class Declared extends WithSubstatements implements AnnotationStatement { + Declared(final QName argument, final ImmutableList> substatements) { + super(argument, substatements); } } @@ -50,8 +48,9 @@ public final class AnnotationStatementSupport private final @NonNull TypeDefinition type; private final @NonNull SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild(argument()); final TypeEffectiveStatement typeStmt = SourceException.throwIfNull( @@ -111,17 +110,6 @@ public final class AnnotationStatementSupport return INSTANCE; } - @Override - public AnnotationStatement createDeclared(final StmtContext ctx) { - return new Declared(ctx); - } - - @Override - public AnnotationEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); - } - @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { return StmtContextUtils.parseIdentifier(ctx, value); @@ -139,4 +127,30 @@ public final class AnnotationStatementSupport protected SubstatementValidator getSubstatementValidator() { return validator; } + + @Override + protected AnnotationStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(ctx.coerceStatementArgument(), substatements); + } + + @Override + protected AnnotationStatement createEmptyDeclared(final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); + } + + @Override + protected AnnotationEffectiveStatement createEffective( + final StmtContext ctx, + final AnnotationStatement declared, + final ImmutableList> substatements) { + return new Effective(ctx, substatements); + } + + @Override + protected AnnotationEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final AnnotationStatement declared) { + return new Effective(ctx, ImmutableList.of()); + } } diff --git a/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java index 64c48eda29..9cc7a3a667 100644 --- a/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java +++ b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc8040.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement; /** @@ -17,6 +18,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatemen */ @Beta public interface YangDataEffectiveStatement extends EffectiveStatement { + @Override + default StatementDefinition statementDefinition() { + return YangDataStatements.YANG_DATA; + } /** * Return the container statement defined in this yang-data statement instance. diff --git a/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java index a3a0a70222..2b8aad0958 100644 --- a/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java +++ b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.rfc8040.model.api; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; /** @@ -16,5 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface YangDataStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return YangDataStatements.YANG_DATA; + } } diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java index d1e2b4a124..ac0b0664e5 100644 --- a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.rfc8040.parser; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Verify; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement; import org.opendaylight.yangtools.rfc8040.model.api.YangDataSchemaNode; @@ -17,6 +18,7 @@ import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -30,8 +32,9 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase private final @NonNull QName maybeQNameArgument; private final @NonNull ContainerEffectiveStatement container; - YangDataEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); + YangDataEffectiveStatementImpl(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); QName maybeQNameArgumentInit; try { diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java index 799b767d55..5e71b1677c 100644 --- a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java @@ -8,32 +8,31 @@ package org.opendaylight.yangtools.rfc8040.parser; import com.google.common.annotations.Beta; +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement; import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement; import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatements; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class YangDataStatementSupport - extends AbstractStatementSupport { + extends BaseStringStatementSupport { /** * Declared statement representation of 'yang-data' extension defined in * RFC 8040. */ - private static final class Declared extends AbstractDeclaredStatement implements YangDataStatement { - Declared(final StmtContext ctx) { - super(ctx); - } - - @Override - public String getArgument() { - return argument(); + private static final class Declared extends WithSubstatements implements YangDataStatement { + Declared(final String rawArgument, final ImmutableList> substatements) { + super(rawArgument, substatements); } } @@ -54,46 +53,55 @@ public final class YangDataStatementSupport } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + public void onFullDefinitionDeclared(final Mutable ctx) { + // as per https://tools.ietf.org/html/rfc8040#section-8, + // yang-data is ignored unless it appears as a top-level statement + if (ctx.coerceParentContext().getParentContext() != null) { + ctx.setIsSupportedToBuildEffective(false); + } } @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; + public boolean isIgnoringIfFeatures() { + return true; } @Override - public YangDataStatement createDeclared(final StmtContext ctx) { - return new Declared(ctx); + public boolean isIgnoringConfig() { + return true; } @Override - public YangDataEffectiveStatement createEffective( - final StmtContext ctx) { - // in case of yang-data node we need to perform substatement validation at the point when we have - // effective substatement contexts already available - if the node has only a uses statement declared in it, - // one top-level container node may very well be added to the yang-data as an effective statement - validator.validate(ctx); - return new YangDataEffectiveStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - public void onFullDefinitionDeclared(final Mutable ctx) { - // as per https://tools.ietf.org/html/rfc8040#section-8, - // yang-data is ignored unless it appears as a top-level statement - if (ctx.coerceParentContext().getParentContext() != null) { - ctx.setIsSupportedToBuildEffective(false); - } + protected YangDataStatement createDeclared(@NonNull final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(ctx.coerceRawStatementArgument(), substatements); } @Override - public boolean isIgnoringIfFeatures() { - return true; + protected YangDataStatement createEmptyDeclared(final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); } @Override - public boolean isIgnoringConfig() { - return true; + protected YangDataEffectiveStatement createEffective( + final StmtContext ctx, + final YangDataStatement declared, final ImmutableList> substatements) { + // in case of yang-data node we need to perform substatement validation at the point when we have + // effective substatement contexts already available - if the node has only a uses statement declared in it, + // one top-level container node may very well be added to the yang-data as an effective statement + validator.validate(ctx); + return new YangDataEffectiveStatementImpl(ctx, substatements); + } + + @Override + protected YangDataEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final YangDataStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } -} \ No newline at end of file +} diff --git a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointEffectiveStatement.java b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointEffectiveStatement.java index e6308ac40c..96aaa1476c 100644 --- a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointEffectiveStatement.java +++ b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointEffectiveStatement.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.rfc8528.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; /** * Effective statement representation of 'mount-point' extension defined in @@ -17,5 +18,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; */ @Beta public interface MountPointEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return SchemaMountStatements.MOUNT_POINT; + } } diff --git a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointStatement.java b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointStatement.java index a81087a446..bfd817987d 100644 --- a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointStatement.java +++ b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointStatement.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc8528.model.api; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatementAwareDeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DocumentedDeclaredStatement.WithStatus; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; @@ -19,6 +20,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; */ @Beta public interface MountPointStatement extends UnknownStatement, WithStatus, - ConfigStatementAwareDeclaredStatement { - + ConfigStatementAwareDeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return SchemaMountStatements.MOUNT_POINT; + } } diff --git a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java index a8367b1d68..8d491c65fb 100644 --- a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java +++ b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.rfc8528.parser; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8528.model.api.MountPointEffectiveStatement; import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaNode; @@ -16,10 +17,12 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; @@ -27,16 +30,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class MountPointStatementSupport - extends AbstractStatementSupport { + extends BaseQNameStatementSupport { - private static final class Declared extends AbstractDeclaredStatement implements MountPointStatement { - Declared(final StmtContext context) { - super(context); - } - - @Override - public QName getArgument() { - return argument(); + private static final class Declared extends WithSubstatements implements MountPointStatement { + Declared(final QName argument, final ImmutableList> substatements) { + super(argument, substatements); } } @@ -45,8 +43,9 @@ public final class MountPointStatementSupport private final @NonNull SchemaPath path; - Effective(final StmtContext ctx) { - super(ctx); + Effective(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild(argument()); } @@ -81,17 +80,6 @@ public final class MountPointStatementSupport return INSTANCE; } - @Override - public MountPointStatement createDeclared(final StmtContext ctx) { - return new Declared(ctx); - } - - @Override - public MountPointEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); - } - @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { return StmtContextUtils.parseIdentifier(ctx, value); @@ -114,4 +102,29 @@ public final class MountPointStatementSupport protected SubstatementValidator getSubstatementValidator() { return validator; } + + @Override + protected MountPointStatement createDeclared(@NonNull final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(ctx.coerceStatementArgument(), substatements); + } + + @Override + protected MountPointStatement createEmptyDeclared(final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); + } + + @Override + protected MountPointEffectiveStatement createEffective( + final StmtContext ctx, + final MountPointStatement declared, final ImmutableList> substatements) { + return new Effective(ctx, substatements); + } + + @Override + protected MountPointEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final MountPointStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); + } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java index 21b95be572..9f70836e2e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java @@ -7,12 +7,14 @@ */ package org.opendaylight.yangtools.yang.parser.openconfig.stmt; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -22,8 +24,9 @@ final class OpenConfigVersionEffectiveStatementImpl extends private final @NonNull SchemaPath path; - OpenConfigVersionEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); + OpenConfigVersionEffectiveStatementImpl(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionStatementImpl.java index 659a350e12..c0b1e92c6b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionStatementImpl.java @@ -7,14 +7,16 @@ */ package org.opendaylight.yangtools.yang.parser.openconfig.stmt; +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.ArgumentToString.WithSubstatements; -final class OpenConfigVersionStatementImpl extends AbstractDeclaredStatement +final class OpenConfigVersionStatementImpl extends WithSubstatements implements OpenConfigVersionStatement { - OpenConfigVersionStatementImpl(final StmtContext context) { - super(context); + OpenConfigVersionStatementImpl(final SemVer argument, + final ImmutableList> substatements) { + super(argument, substatements); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java index 7a827a7fe2..fabf32bc7e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java @@ -7,18 +7,21 @@ */ package org.opendaylight.yangtools.yang.parser.openconfig.stmt; +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class OpenConfigVersionSupport - extends AbstractStatementSupport { + extends BaseStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( OpenConfigStatements.OPENCONFIG_VERSION).build(); private static final OpenConfigVersionSupport INSTANCE = new OpenConfigVersionSupport(); @@ -43,18 +46,34 @@ public final class OpenConfigVersionSupport } @Override - public OpenConfigVersionStatement createDeclared(final StmtContext ctx) { - return new OpenConfigVersionStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - public OpenConfigVersionEffectiveStatement createEffective( - final StmtContext ctx) { - return new OpenConfigVersionEffectiveStatementImpl(ctx); + protected OpenConfigVersionStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new OpenConfigVersionStatementImpl(ctx.coerceStatementArgument(), substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected OpenConfigVersionStatement createEmptyDeclared( + final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); + } + + @Override + protected OpenConfigVersionEffectiveStatement createEffective( + final StmtContext ctx, + final OpenConfigVersionStatement declared, + final ImmutableList> substatements) { + return new OpenConfigVersionEffectiveStatementImpl(ctx, substatements); + } + + @Override + protected OpenConfigVersionEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final OpenConfigVersionStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } -} \ No newline at end of file +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java index 4e0a7bffbb..57e9142bd7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java @@ -200,4 +200,29 @@ public abstract class AbstractDeclaredStatement extends AbstractModelStatemen return argument.toString(); } } + + public abstract static class WithoutArgument extends AbstractDeclaredStatement { + public abstract static class WithSubstatements extends WithoutArgument { + private final @NonNull Object substatements; + + protected WithSubstatements(final ImmutableList> substatements) { + this.substatements = maskList(substatements); + } + + @Override + public final Collection> declaredSubstatements() { + return unmaskList(substatements); + } + } + + @Override + public final Void argument() { + return null; + } + + @Override + public final String rawArgument() { + return null; + } + } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNodeWithStatus.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNodeWithStatus.java index 6560a27cf4..24b40f0014 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNodeWithStatus.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNodeWithStatus.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; +import static java.util.Objects.requireNonNull; + import com.google.common.annotations.Beta; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; @@ -40,13 +42,12 @@ public abstract class AbstractEffectiveDocumentedNodeWithStatus ctx) { + protected AbstractEffectiveDocumentedNodeWithStatus(final StmtContext ctx, + final ImmutableList> substatements) { argument = ctx.getStatementArgument(); statementSource = ctx.getStatementSource(); declaredInstance = ctx.buildDeclared(); - substatements = ImmutableList.copyOf( - Collections2.transform(Collections2.filter(BaseStatementSupport.declaredSubstatements(ctx), - StmtContext::isSupportedToBuildEffective), StmtContext::buildEffective)); + this.substatements = requireNonNull(substatements); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseVoidStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseVoidStatementSupport.java new file mode 100644 index 0000000000..2172612c7f --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseVoidStatementSupport.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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; + +import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +@Beta +public abstract class BaseVoidStatementSupport, E extends EffectiveStatement> + extends BaseStatementSupport { + protected BaseVoidStatementSupport(final StatementDefinition publicDefinition) { + super(publicDefinition, CopyPolicy.CONTEXT_INDEPENDENT); + } + + @Override + public final Void parseArgumentValue(final StmtContext ctx, final String value) { + return null; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java index 2f1e6f0c7e..38362a952a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -30,8 +31,9 @@ public abstract class UnknownEffectiveStatementBase ctx) { - super(ctx); + protected UnknownEffectiveStatementBase(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); final StmtContext extensionInit = ctx.getFromNamespace(ExtensionNamespace.class, ctx.getPublicDefinition().getStatementName()); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index 4ca8e8c2da..588df62c7b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -7,10 +7,12 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; @@ -27,8 +29,9 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement private final QName maybeQNameArgument; private final @NonNull SchemaPath path; - UnrecognizedEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); + UnrecognizedEffectiveStatementImpl(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); // FIXME: Remove following section after fixing 4380 final UnknownSchemaNode original = (UnknownSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java index e60ccdf222..5a18c96b1f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java @@ -7,12 +7,25 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -final class UnrecognizedStatementImpl extends AbstractDeclaredStatement implements UnrecognizedStatement { - UnrecognizedStatementImpl(final StmtContext context) { - super(context); +final class UnrecognizedStatementImpl extends WithSubstatements implements UnrecognizedStatement { + private final @NonNull StatementDefinition definition; + + UnrecognizedStatementImpl(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); + this.definition = context.getPublicDefinition(); + } + + @Override + public StatementDefinition statementDefinition() { + return definition; } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java index d493f3442d..cec58c09f1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java @@ -7,19 +7,22 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import com.google.common.collect.ImmutableList; import java.util.Optional; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; final class UnrecognizedStatementSupport - extends AbstractStatementSupport { + extends BaseStatementSupport { UnrecognizedStatementSupport(final StatementDefinition publicDefinition) { super(publicDefinition); } @@ -29,22 +32,6 @@ final class UnrecognizedStatementSupport return value; } - @Override - public UnrecognizedStatement createDeclared(final StmtContext ctx) { - return new UnrecognizedStatementImpl(ctx); - } - - @Override - public UnrecognizedEffectiveStatement createEffective( - final StmtContext ctx) { - return new UnrecognizedEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return null; - } - @Override public Optional> getUnknownStatementDefinitionOf( final StatementDefinition yangStmtDef) { @@ -61,4 +48,36 @@ final class UnrecognizedStatementSupport } return Optional.of(new ModelDefinedStatementSupport(def)); } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return null; + } + + @Override + protected UnrecognizedStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new UnrecognizedStatementImpl(ctx, substatements); + } + + @Override + protected UnrecognizedStatement createEmptyDeclared(final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); + } + + @Override + protected UnrecognizedEffectiveStatement createEffective( + final StmtContext ctx, + final UnrecognizedStatement declared, + final ImmutableList> substatements) { + return new UnrecognizedEffectiveStatementImpl(ctx, substatements); + } + + @Override + protected UnrecognizedEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final UnrecognizedStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); + } + } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java index ba5f8b681f..abff9fe21d 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java @@ -7,9 +7,11 @@ */ package org.opendaylight.yangtools.yang.thirdparty.plugin; +import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -20,8 +22,9 @@ final class ThirdPartyExtensionEffectiveStatementImpl private final @NonNull SchemaPath path; private final String valueFromNamespace; - ThirdPartyExtensionEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); + ThirdPartyExtensionEffectiveStatementImpl(final StmtContext ctx, + final ImmutableList> substatements) { + super(ctx, substatements); path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); valueFromNamespace = ctx.getFromNamespace(ThirdPartyNamespace.class, ctx); } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java index 75173df3fc..6161777ec0 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.thirdparty.plugin; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; /** @@ -14,5 +15,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; * concepts defined in yang-model-api. */ public interface ThirdPartyExtensionStatement extends UnknownStatement { - + @Override + default StatementDefinition statementDefinition() { + return ThirdPartyExtensionsMapping.THIRD_PARTY_EXTENSION; + } } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java index 686492e954..de5d4608e0 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java @@ -7,17 +7,18 @@ */ package org.opendaylight.yangtools.yang.thirdparty.plugin; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; /** * Private implementation of {@link ThirdPartyExtensionStatement}. This class can rely on parser internals and should * never be exposed to the world. */ -final class ThirdPartyExtensionStatementImpl extends AbstractDeclaredStatement implements - ThirdPartyExtensionStatement { - - ThirdPartyExtensionStatementImpl(final StmtContext context) { - super(context); +final class ThirdPartyExtensionStatementImpl extends WithSubstatements implements ThirdPartyExtensionStatement { + ThirdPartyExtensionStatementImpl(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); } } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java index d77f07e695..54a8e3d409 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java @@ -7,14 +7,16 @@ */ package org.opendaylight.yangtools.yang.thirdparty.plugin; +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -public final class ThirdPartyExtensionSupport extends AbstractStatementSupport> { +public final class ThirdPartyExtensionSupport + extends BaseStringStatementSupport { private static final ThirdPartyExtensionSupport INSTANCE = new ThirdPartyExtensionSupport(); @@ -27,30 +29,42 @@ public final class ThirdPartyExtensionSupport extends AbstractStatementSupport ctx, final String value) { - return value; + public void onFullDefinitionDeclared( + final Mutable stmt) { + super.onFullDefinitionDeclared(stmt); + stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test."); } @Override - public void onFullDefinitionDeclared(final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test."); + protected SubstatementValidator getSubstatementValidator() { + return null; } @Override - public ThirdPartyExtensionStatement createDeclared(final StmtContext ctx) { - return new ThirdPartyExtensionStatementImpl(ctx); + protected ThirdPartyExtensionStatement createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return new ThirdPartyExtensionStatementImpl(ctx, substatements); } @Override - public EffectiveStatement createEffective(final StmtContext> ctx) { - return new ThirdPartyExtensionEffectiveStatementImpl(ctx); + protected ThirdPartyExtensionStatement createEmptyDeclared( + final StmtContext ctx) { + return createDeclared(ctx, ImmutableList.of()); } @Override - protected SubstatementValidator getSubstatementValidator() { - return null; + protected ThirdPartyExtensionEffectiveStatement createEffective( + final StmtContext ctx, + final ThirdPartyExtensionStatement declared, + final ImmutableList> substatements) { + return new ThirdPartyExtensionEffectiveStatementImpl(ctx, substatements); + } + + @Override + protected ThirdPartyExtensionEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final ThirdPartyExtensionStatement declared) { + return createEffective(ctx, declared, ImmutableList.of()); } -} \ No newline at end of file +} -- 2.36.6