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%2Fkey%2FKeyStatementSupport.java;h=27aa30050e60357ea414f7b5e285235c63dcc6bf;hb=5fe0d9e2a63cc9cf3be8c39f32305cf9e2a8be4e;hp=b1466b2cf3968ab4921026693f4ed460902d7b57;hpb=3cb21f96c1d8b5b22dc948a2c016180cb2456fc8;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java index b1466b2cf3..27aa30050e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key; import static com.google.common.base.Verify.verify; +import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -22,6 +23,7 @@ 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.KeyEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -31,7 +33,27 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class KeyStatementSupport extends BaseStatementSupport, KeyStatement, KeyEffectiveStatement> { - private static final Splitter LIST_KEY_SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults(); + /** + * This is equivalent to {@link YangStatementLexer#SEP}'s definition. Currently equivalent to the non-repeating + * part of: + * + *

+ * {@code SEP: [ \n\r\t]+ -> type(SEP);}. + */ + private static final CharMatcher SEP = CharMatcher.anyOf(" \n\r\t").precomputed(); + + /** + * Splitter corresponding to {@code key-arg} ABNF as defined + * in RFC6020, section 12: + * + *

+ * {@code key-arg = node-identifier *(sep node-identifier)} + * + *

+ * We also account for {@link #SEP} not handling repetition by ignoring empty strings. + */ + private static final Splitter KEY_ARG_SPLITTER = Splitter.on(SEP).omitEmptyStrings(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.KEY) .build(); @@ -49,7 +71,7 @@ public final class KeyStatementSupport public ImmutableSet parseArgumentValue(final StmtContext ctx, final String value) { final Builder builder = ImmutableSet.builder(); int tokens = 0; - for (String keyToken : LIST_KEY_SPLITTER.split(value)) { + for (String keyToken : KEY_ARG_SPLITTER.split(value)) { builder.add(StmtContextUtils.parseNodeIdentifier(ctx, keyToken)); tokens++; }