X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Frfc7952-parser-support%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Frfc7952%2Fparser%2FAnnotationStatementSupport.java;h=bca16f5423f0f84892baefd594ed31490675c738;hb=dadc9aa0a7f3af000b4205f94cf86dba7e908d75;hp=c786ce6cf6705e26c3d48a98df911dab6ecb122e;hpb=fc9f0211809fea4f93ce20f9d3da7778cd1fab04;p=yangtools.git 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 c786ce6cf6..bca16f5423 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 @@ -8,29 +8,18 @@ package org.opendaylight.yangtools.rfc7952.parser; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationEffectiveStatement; -import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationStatement; import org.opendaylight.yangtools.rfc7952.model.api.MetadataStatements; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults; -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.DeclarationReference; 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.UnitsEffectiveStatement; -import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; -import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport; 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; @@ -39,83 +28,17 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class AnnotationStatementSupport extends AbstractStatementSupport { - - private static final class Declared extends WithSubstatements implements AnnotationStatement { - Declared(final QName argument, final ImmutableList> substatements) { - super(argument, substatements); - } - } - - private static final class Effective extends UnknownEffectiveStatementBase - implements AnnotationEffectiveStatement, AnnotationSchemaNode { - - private final @NonNull TypeDefinition type; - private final @Nullable SchemaPath path; - - Effective(final Current stmt, - final ImmutableList> substatements) { - super(stmt, substatements); - path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(argument())); - - final TypeEffectiveStatement typeStmt = SourceException.throwIfNull( - firstSubstatementOfType(TypeEffectiveStatement.class), stmt, - "AnnotationStatementSupport %s is missing a 'type' statement", argument()); - - final ConcreteTypeBuilder builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(), - path); - final UnitsEffectiveStatement unitsStmt = firstSubstatementOfType(UnitsEffectiveStatement.class); - if (unitsStmt != null) { - builder.setUnits(unitsStmt.argument()); - } - type = builder.build(); - } - - @Override - public QName getQName() { - return path.getLastComponent(); - } - - @Override - @Deprecated - public SchemaPath getPath() { - return SchemaNodeDefaults.throwUnsupportedIfNull(this, path); - } - - @Override - public TypeDefinition getType() { - return type; - } - - @Override - public TypeDefinition getTypeDefinition() { - return type; - } - - @Override - public AnnotationEffectiveStatement asEffectiveStatement() { - return this; - } - } - - private static final AnnotationStatementSupport INSTANCE = new AnnotationStatementSupport( - MetadataStatements.ANNOTATION); - - private final SubstatementValidator validator; - - AnnotationStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.reject()); - this.validator = SubstatementValidator.builder(definition) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.UNITS) - .build(); - } - - public static AnnotationStatementSupport getInstance() { - return INSTANCE; + 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); } @Override @@ -132,23 +55,24 @@ public final class AnnotationStatementSupport @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override protected AnnotationStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { - return new Declared(ctx.getArgument(), substatements); + return new AnnotationStatementImpl(ctx.getArgument(), substatements); } @Override - protected AnnotationStatement createEmptyDeclared(final StmtContext ctx) { - return createDeclared(ctx, ImmutableList.of()); + protected AnnotationStatement attachDeclarationReference(final AnnotationStatement stmt, + final DeclarationReference reference) { + return new RefAnnotationStatement(stmt, reference); } @Override protected AnnotationEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - return new Effective(stmt, substatements); + return new AnnotationEffectiveStatementImpl(stmt, substatements); } }