X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fimpl%2FBasicValidations.java;h=3fda4e0202adcda36d11fa1e7a215e592f656fbe;hb=42abb28b99a02f9580f4676ce5c315628e5bcd24;hp=b78fb046526674a8f0e09c1f374aec4ba2a10c33;hpb=c6b4017ff4babad7e237c56ebe299efc90a6f990;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/BasicValidations.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/BasicValidations.java index b78fb04652..3fda4e0202 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/BasicValidations.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/BasicValidations.java @@ -3,19 +3,21 @@ * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/eplv10.html + * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.parser.impl; import static java.lang.String.format; +import com.google.common.base.Splitter; import com.google.common.collect.Sets; + import java.text.ParseException; import java.util.Date; -import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; + import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Yang_version_stmtContext; @@ -28,6 +30,9 @@ import org.opendaylight.yangtools.yang.parser.util.YangValidationException; final class BasicValidations { static final String SUPPORTED_YANG_VERSION = "1"; + private static final Splitter SLASH_SPLITTER = Splitter.on('/').omitEmptyStrings(); + private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*"); + private static final Pattern PREFIX_IDENTIFIER_PATTERN = Pattern.compile("(.+):(.+)"); /** * It isn't desirable to create instance of this class. @@ -99,17 +104,15 @@ final class BasicValidations { } } - private static final Pattern identifierPattern = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*"); - static void checkIdentifier(final ParseTree statement) { checkIdentifierInternal(statement, ValidationUtil.getName(statement)); } static void checkIdentifierInternal(final ParseTree statement, final String name) { - if (!identifierPattern.matcher(name).matches()) { + if (!IDENTIFIER_PATTERN.matcher(name).matches()) { String message = ValidationUtil.f("%s statement identifier:%s is not in required format:%s", - ValidationUtil.getSimpleStatementName(statement.getClass()), name, identifierPattern.toString()); + ValidationUtil.getSimpleStatementName(statement.getClass()), name, IDENTIFIER_PATTERN.toString()); String parent = ValidationUtil.getRootParentName(statement); message = parent.equals(name) ? message : ValidationUtil.f("(In (sub)module:%s) %s", parent, message); @@ -121,14 +124,12 @@ final class BasicValidations { } } - private static final Pattern prefixedIdentifierPattern = Pattern.compile("(.+):(.+)"); - static void checkPrefixedIdentifier(final ParseTree statement) { checkPrefixedIdentifierInternal(statement, ValidationUtil.getName(statement)); } private static void checkPrefixedIdentifierInternal(final ParseTree statement, final String id) { - Matcher matcher = prefixedIdentifierPattern.matcher(id); + Matcher matcher = PREFIX_IDENTIFIER_PATTERN.matcher(id); if (matcher.matches()) { try { @@ -149,10 +150,7 @@ final class BasicValidations { String id = ValidationUtil.getName(statement); try { - for (String oneOfId : id.split("/")) { - if (oneOfId.isEmpty()) { - continue; - } + for (String oneOfId : SLASH_SPLITTER.split(id)) { checkPrefixedIdentifierInternal(statement, oneOfId); } } catch (YangValidationException e) { @@ -166,7 +164,7 @@ final class BasicValidations { } private static void checkPresentChildOfTypeInternal(final ParseTree parent, final Set> expectedChildType, - final MessageProvider message, final boolean atMostOne) { + final MessageProvider message, final boolean atMostOne) { if (!checkPresentChildOfTypeSafe(parent, expectedChildType, atMostOne)) { String str = atMostOne ? "(Expected exactly one statement) " + message.getMessage() : message.getMessage(); ValidationUtil.ex(str); @@ -217,10 +215,9 @@ final class BasicValidations { @Override public String getMessage() { StringBuilder childTypes = new StringBuilder(); - String orStr = " OR "; for (Class type : expectedChildTypes) { childTypes.append(ValidationUtil.getSimpleStatementName(type)); - childTypes.append(orStr); + childTypes.append(" OR "); } String message = ValidationUtil.f("Missing %s statement in %s:%s", childTypes.toString(), ValidationUtil.getSimpleStatementName(parent.getClass()), ValidationUtil.getName(parent)); @@ -241,7 +238,7 @@ final class BasicValidations { } private static boolean checkPresentChildOfTypeSafe(final ParseTree parent, final Set> expectedChildType, - final boolean atMostOne) { + final boolean atMostOne) { int foundChildrenOfType = ValidationUtil.countPresentChildrenOfType(parent, expectedChildType); @@ -249,22 +246,22 @@ final class BasicValidations { } private static boolean checkPresentChildOfTypeSafe(final ParseTree parent, final Class expectedChildType, - final boolean atMostOne) { + final boolean atMostOne) { int foundChildrenOfType = ValidationUtil.countPresentChildrenOfType(parent, expectedChildType); return atMostOne ? foundChildrenOfType == 1 : foundChildrenOfType != 0; } - static List getAndCheckUniqueKeys(final ParseTree ctx) { + static Iterable getAndCheckUniqueKeys(final ParseTree ctx) { String key = ValidationUtil.getName(ctx); ParseTree parent = ctx.getParent(); String rootParentName = ValidationUtil.getRootParentName(ctx); - List keyList = ValidationUtil.listKeysFromId(key); + Iterable keyList = ValidationUtil.listKeysFromId(key); Set duplicates = ValidationUtil.getDuplicates(keyList); - if (duplicates.size() != 0) { + if (!duplicates.isEmpty()) { ValidationUtil.ex(ValidationUtil.f("(In (sub)module:%s) %s:%s, %s:%s contains duplicates:%s", rootParentName, ValidationUtil.getSimpleStatementName(parent.getClass()), ValidationUtil.getName(parent), ValidationUtil.getSimpleStatementName(ctx.getClass()), key,