X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Ftype%2FInstanceIdentifierSpecificationSupport.java;h=3c797cce2ba69ed020c9368a5b7986155e5fe101;hb=2d8edd5622078f454592ef120e627f59a5d05c42;hp=19dfe29ff90a61fab8068ab4b4bb4fb5ed8c3e8a;hpb=d693701b368eeb1e9e9aabfe3be39b0c9ff59fe6;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java index 19dfe29ff9..3c797cce2b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java @@ -8,32 +8,28 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.common.QName; 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.stmt.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification; -import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; -import org.opendaylight.yangtools.yang.model.util.type.InstanceIdentifierTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; +import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.ri.type.InstanceIdentifierTypeBuilder; +import org.opendaylight.yangtools.yang.model.ri.type.RestrictedTypes; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -final class InstanceIdentifierSpecificationSupport extends BaseStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .build(); +final class InstanceIdentifierSpecificationSupport + extends AbstractTypeSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE).addOptional(YangStmtMapping.REQUIRE_INSTANCE).build(); - InstanceIdentifierSpecificationSupport() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; + InstanceIdentifierSpecificationSupport(final YangParserConfiguration config) { + super(config); } @Override @@ -43,41 +39,32 @@ final class InstanceIdentifierSpecificationSupport extends BaseStatementSupport< @Override protected InstanceIdentifierSpecification createDeclared( - final StmtContext ctx, + final StmtContext ctx, final ImmutableList> substatements) { - return new RegularInstanceIdentifierSpecification(ctx, substatements); + return substatements.isEmpty() ? new EmptyIdentifierSpecification(ctx.getRawArgument(), ctx.getArgument()) + : new RegularInstanceIdentifierSpecification(ctx.getRawArgument(), ctx.getArgument(), substatements); } @Override - protected InstanceIdentifierSpecification createEmptyDeclared( - final StmtContext ctx) { - return new EmptyIdentifierSpecification(ctx); + protected InstanceIdentifierSpecification attachDeclarationReference(final InstanceIdentifierSpecification stmt, + final DeclarationReference reference) { + return new RefInstanceIdentifierSpecification(stmt, reference); } @Override - protected EffectiveStatement createEffective( - final StmtContext> ctx, - final InstanceIdentifierSpecification declared, + protected EffectiveStatement createEffective( + final Current stmt, final ImmutableList> substatements) { final InstanceIdentifierTypeBuilder builder = RestrictedTypes.newInstanceIdentifierBuilder( - BaseTypes.instanceIdentifierType(), ctx.getSchemaPath().get()); + BaseTypes.instanceIdentifierType(), stmt.argumentAsTypeQName()); - for (EffectiveStatement stmt : substatements) { - if (stmt instanceof RequireInstanceEffectiveStatement) { - builder.setRequireInstance(((RequireInstanceEffectiveStatement)stmt).argument()); + // TODO: we could do better here for empty substatements, but its really splitting hairs + for (EffectiveStatement subStmt : substatements) { + if (subStmt instanceof RequireInstanceEffectiveStatement) { + builder.setRequireInstance(((RequireInstanceEffectiveStatement)subStmt).argument()); } } - return new TypeEffectiveStatementImpl<>(declared, substatements, builder); - } - - @Override - protected EffectiveStatement createEmptyEffective( - final StmtContext> ctx, - final InstanceIdentifierSpecification declared) { - // TODO: we could do better here, but its really splitting hairs - return createEffective(ctx, declared, ImmutableList.of()); + return new TypeEffectiveStatementImpl<>(stmt.declared(), substatements, builder); } } \ No newline at end of file