- extends AbstractStatementSupport<QName, AnnotationStatement, AnnotationEffectiveStatement> {
-
- private static final class Declared extends AbstractDeclaredStatement<QName> implements AnnotationStatement {
- Declared(final StmtContext<QName, ?, ?> context) {
- super(context);
- }
-
- @Override
- public QName getArgument() {
- return argument();
- }
- }
-
- private static final class Effective extends UnknownEffectiveStatementBase<QName, AnnotationStatement>
- implements AnnotationEffectiveStatement, AnnotationSchemaNode {
-
- private final @NonNull TypeDefinition<?> type;
- private final @NonNull SchemaPath path;
-
- Effective(final StmtContext<QName, AnnotationStatement, ?> ctx) {
- super(ctx);
- path = ctx.coerceParentContext().getSchemaPath().get().createChild(argument());
-
- final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
- firstSubstatementOfType(TypeEffectiveStatement.class), ctx.getStatementSourceReference(),
- "AnnotationStatementSupport %s is missing a 'type' statement", argument());
-
- final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
- path);
- final StmtContext<String, ?, ?> unitsStmt = StmtContextUtils.findFirstEffectiveSubstatement(ctx,
- UnitsStatement.class);
- if (unitsStmt != null) {
- builder.setUnits(unitsStmt.getStatementArgument());
- }
- type = builder.build();
- }
-
- @Override
- public QName getQName() {
- return path.getLastComponent();
- }
-
- @Override
- public SchemaPath getPath() {
- return path;
- }
-
- @Override
- public TypeDefinition<?> getType() {
- return type;
- }
-
- @Override
- public TypeDefinition<?> getTypeDefinition() {
- return type;
- }
+ extends AbstractStatementSupport<QName, AnnotationStatement, AnnotationEffectiveStatement> {
+ private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(MetadataStatements.ANNOTATION)
+ .addMandatory(YangStmtMapping.TYPE)
+ .addOptional(YangStmtMapping.DESCRIPTION)
+ .addAny(YangStmtMapping.IF_FEATURE)
+ .addOptional(YangStmtMapping.REFERENCE)
+ .addOptional(YangStmtMapping.STATUS)
+ .addOptional(YangStmtMapping.UNITS)
+ .build();
+
+ public AnnotationStatementSupport(final YangParserConfiguration config) {
+ super(MetadataStatements.ANNOTATION, StatementPolicy.reject(), config);