From 0fdc4afe1337d83cefcd12f06639393da98772ba Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 16 Sep 2021 02:59:09 +0200 Subject: [PATCH] Publish identifier matches Our private matches are useful for other parsers which need to handle YANG's identifier ABNF production. Document and publish them from YangNames. Change-Id: Icb4e75479e0654fa21d0cedda88cce6690647b62 Signed-off-by: Robert Varga (cherry picked from commit d59eb4b2549043b28617be171fdb8793a3f804c4) --- .../yangtools/yang/common/AbstractQName.java | 8 ++------ .../yangtools/yang/common/YangNames.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java index d86c5c407f..c82e3a02cc 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java @@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; -import com.google.common.base.CharMatcher; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Identifier; @@ -25,10 +24,6 @@ import org.opendaylight.yangtools.concepts.WritableObject; @NonNullByDefault public abstract class AbstractQName implements Identifier, WritableObject { private static final long serialVersionUID = 1L; - private static final CharMatcher IDENTIFIER_START = - CharMatcher.inRange('A', 'Z').or(CharMatcher.inRange('a', 'z').or(CharMatcher.is('_'))).precomputed(); - private static final CharMatcher NOT_IDENTIFIER_PART = - IDENTIFIER_START.or(CharMatcher.inRange('0', '9')).or(CharMatcher.anyOf("-.")).negate().precomputed(); private final String localName; @@ -91,6 +86,7 @@ public abstract class AbstractQName implements Identifier, WritableObject { } private static boolean checkContent(final String localName) { - return IDENTIFIER_START.matches(localName.charAt(0)) && NOT_IDENTIFIER_PART.indexIn(localName, 1) == -1; + return YangNames.IDENTIFIER_START.matches(localName.charAt(0)) + && YangNames.NOT_IDENTIFIER_PART.indexIn(localName, 1) == -1; } } diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNames.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNames.java index d6f34bdb0b..c7eda8ba67 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNames.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNames.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.common; import com.google.common.annotations.Beta; +import com.google.common.base.CharMatcher; import java.util.AbstractMap.SimpleEntry; import java.util.Map.Entry; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -21,6 +22,19 @@ import org.eclipse.jdt.annotation.Nullable; @Beta @NonNullByDefault public final class YangNames { + /** + * A {@link CharMatcher} matching the first character of a YANG {@code identifier} ABNF production, + * {@code (ALPHA / "_")}. + */ + public static final CharMatcher IDENTIFIER_START = + CharMatcher.inRange('A', 'Z').or(CharMatcher.inRange('a', 'z').or(CharMatcher.is('_'))).precomputed(); + /** + * A {@link CharMatcher} NOT matching second and later characters of a YANG {@code identifier} ABNF production, + * {@code (ALPHA / DIGIT / "_" / "-" / ".")}. + */ + public static final CharMatcher NOT_IDENTIFIER_PART = + IDENTIFIER_START.or(CharMatcher.inRange('0', '9')).or(CharMatcher.anyOf("-.")).negate().precomputed(); + private YangNames() { // Hidden on purpose } -- 2.36.6