[ONOS-4762][ONOS-4601]Grammar for meta data + Union defect fix
Change-Id: I8f78127e5b292cca6a79b32d496c2602c9105acd
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
index 8f08842..67c2e36 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
@@ -1376,6 +1376,99 @@
}
@Override
+ public void enterCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationStatement(GeneratedYangParser.AnnotationStatementContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationStatement(GeneratedYangParser.AnnotationStatementContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationType(GeneratedYangParser.AnnotationTypeContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationType(GeneratedYangParser.AnnotationTypeContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationParameterSpecification(GeneratedYangParser.AnnotationParameterSpecificationContext
+ ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationParameterSpecification(GeneratedYangParser.AnnotationParameterSpecificationContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationParameterSpecificationArg(GeneratedYangParser.AnnotationParameterSpecificationArgContext
+ ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationParameterSpecificationArg(GeneratedYangParser.AnnotationParameterSpecificationArgContext
+ ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationParaInstance(GeneratedYangParser.AnnotationParaInstanceContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationParaInstance(GeneratedYangParser.AnnotationParaInstanceContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationParaTypeIdentifier(GeneratedYangParser.AnnotationParaTypeIdentifierContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationParaTypeIdentifier(GeneratedYangParser.AnnotationParaTypeIdentifierContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationParaTypeValue(GeneratedYangParser.AnnotationParaTypeValueContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationParaTypeValue(GeneratedYangParser.AnnotationParaTypeValueContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void enterAnnotationIdentifier(GeneratedYangParser.AnnotationIdentifierContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitAnnotationIdentifier(GeneratedYangParser.AnnotationIdentifierContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
public void enterVersion(GeneratedYangParser.VersionContext ctx) {
// do nothing.
}
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
index 9fab09c..4043a8e 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
@@ -16,7 +16,6 @@
package org.onosproject.yangutils.parser.impl.listeners;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
@@ -27,6 +26,7 @@
import org.onosproject.yangutils.datamodel.YangUnion;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.datamodel.utils.Parsable;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
@@ -94,6 +94,8 @@
// Obtain the YANG data type.
YangDataTypes yangDataTypes = YangDataTypes.getType(ctx.string().getText());
+ validateTypeSubStatementCardinality(ctx, yangDataTypes);
+
// Create YANG type object and fill the values.
YangType<?> type = getYangType(JAVA_GENERATION);
type.setNodeIdentifier(nodeIdentifier);
@@ -265,4 +267,37 @@
TYPE_DATA, ctx.string().getText(), ENTRY, e.getMessage()));
}
}
+
+ /**
+ * Validates type body statements cardinality.
+ *
+ * @param ctx context object of the grammar rule
+ * @param yangDataType yang data type
+ */
+ private static void validateTypeSubStatementCardinality(GeneratedYangParser.TypeStatementContext ctx,
+ YangDataTypes yangDataType) {
+ if (ctx.typeBodyStatements() == null || ctx.typeBodyStatements().isEmpty()) {
+ ParserException parserException;
+ switch (yangDataType) {
+ case UNION:
+ parserException = new ParserException("YANG file error : a type union" +
+ " must have atleast one type statement.");
+ break;
+ case ENUMERATION:
+ parserException = new ParserException("YANG file error : a type enumeration" +
+ " must have atleast one enum statement.");
+ break;
+ case BITS:
+ parserException = new ParserException("YANG file error : a type bits" +
+ " must have atleast one bit statement.");
+ break;
+ // TODO : decimal64, identity ref, leafref
+ default:
+ return;
+ }
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
}