From 49e5698f622202aeb9d7135474fd984f96add2f6 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 7 Mar 2019 21:37:13 +0100 Subject: [PATCH] Fix AnnotationStatement definition Annotation argument is required to be identifiers, which means their argument really binds as a QName to the defining module. Change the definition to reflect this fact. This forces the argument to be validated properly as well as making it easier to use. Change-Id: Idca53d98517ab3627b4b555386bed6a740c3e66d Signed-off-by: Robert Varga --- .../api/AnnotationEffectiveStatement.java | 3 ++- .../model/api/AnnotationStatement.java | 3 ++- .../parser/AnnotationStatementSupport.java | 26 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) 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 787f9c7035..0cb9f3779b 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 @@ -8,6 +8,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; /** @@ -15,7 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; * RFC7952. */ @Beta -public interface AnnotationEffectiveStatement extends EffectiveStatement, +public interface AnnotationEffectiveStatement extends EffectiveStatement, AnnotationSchemaNode { } 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 93d92c76d3..aac43fb543 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 @@ -8,6 +8,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.stmt.UnknownStatement; /** @@ -15,6 +16,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; * RFC7952. */ @Beta -public interface AnnotationStatement extends UnknownStatement { +public interface AnnotationStatement extends UnknownStatement { } 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 9a3337683d..85fdcc5c54 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 @@ -29,29 +29,28 @@ 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 AbstractStatementSupport { - private static final class Declared extends AbstractDeclaredStatement implements AnnotationStatement { - Declared(final StmtContext context) { + private static final class Declared extends AbstractDeclaredStatement implements AnnotationStatement { + Declared(final StmtContext context) { super(context); } @Override - public String getArgument() { + public QName getArgument() { return argument(); } } - private static final class Effective extends UnknownEffectiveStatementBase + private static final class Effective extends UnknownEffectiveStatementBase implements AnnotationEffectiveStatement { private final TypeDefinition type; private final SchemaPath path; - Effective(final StmtContext ctx) { + Effective(final StmtContext ctx) { super(ctx); - path = ctx.coerceParentContext().getSchemaPath().get().createChild( - StmtContextUtils.parseIdentifier(ctx, argument())); + path = ctx.coerceParentContext().getSchemaPath().get().createChild(argument()); final TypeEffectiveStatement typeStmt = SourceException.throwIfNull( firstSubstatementOfType(TypeEffectiveStatement.class), ctx.getStatementSourceReference(), @@ -105,24 +104,23 @@ public final class AnnotationStatementSupport } @Override - public AnnotationStatement createDeclared(final StmtContext ctx) { + public AnnotationStatement createDeclared(final StmtContext ctx) { return new Declared(ctx); } @Override public AnnotationEffectiveStatement createEffective( - final StmtContext ctx) { + final StmtContext ctx) { return new Effective(ctx); } @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - // FIXME: validate this is in fact an identifier as per RFC7950 Section 6.2 - return value; + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.parseIdentifier(ctx, value); } @Override - public void onStatementAdded(final Mutable stmt) { + public void onStatementAdded(final Mutable stmt) { final StatementDefinition parentDef = stmt.coerceParentContext().getPublicDefinition(); SourceException.throwIf(YangStmtMapping.MODULE != parentDef && YangStmtMapping.SUBMODULE != parentDef, stmt.getStatementSourceReference(), -- 2.36.6