YANG Grouping Linker Support

Change-Id: I2fec0c0bb4d1584e82ffba3228106897ccad2bf5
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java
index 32bd3aa..eddfa56 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java
+++ b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java
@@ -40,8 +40,9 @@
  */
 
 /**
- * Represents listener based call back function corresponding to the "description"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ * Represents listener based call back function corresponding to the
+ * "description" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
  */
 public final class DescriptionListener {
 
@@ -52,15 +53,14 @@
     }
 
     /**
-     * It is called when parser receives an input matching the grammar
-     * rule (description), perform validations and updates the data model
-     * tree.
+     * It is called when parser receives an input matching the grammar rule
+     * (description), perform validations and updates the data model tree.
      *
      * @param listener listener's object
      * @param ctx context object of the grammar rule
      */
     public static void processDescriptionEntry(TreeWalkListener listener,
-                                             GeneratedYangParser.DescriptionStatementContext ctx) {
+            GeneratedYangParser.DescriptionStatementContext ctx) {
 
         // Check for stack to be non empty.
         checkStackIsNotEmpty(listener, MISSING_HOLDER, DESCRIPTION_DATA, ctx.string().getText(), ENTRY);
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java
index 81223fd..9d215d2 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java
+++ b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java
@@ -45,8 +45,8 @@
  */
 
 /**
- * Represesnts listener based call back function corresponding to the "key"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ * Represesnts listener based call back function corresponding to the "key" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
  */
 public final class KeyListener {
 
@@ -57,15 +57,14 @@
     }
 
     /**
-     * It is called when parser receives an input matching the grammar
-     * rule (key), perform validations and updates the data model
-     * tree.
+     * It is called when parser receives an input matching the grammar rule
+     * (key), perform validations and updates the data model tree.
      *
      * @param listener listener's object
      * @param ctx context object of the grammar rule
      */
     public static void processKeyEntry(TreeWalkListener listener,
-                                         GeneratedYangParser.KeyStatementContext ctx) {
+            GeneratedYangParser.KeyStatementContext ctx) {
 
         // Check for stack to be non empty.
         checkStackIsNotEmpty(listener, MISSING_HOLDER, KEY_DATA, ctx.key().getText(), ENTRY);
@@ -94,7 +93,7 @@
             }
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, KEY_DATA, ctx.key().getText(),
-                            ENTRY));
+                    ENTRY));
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
index 738ffa9..b8e3b2d 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
+++ b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
@@ -27,10 +27,13 @@
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
 
+import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangLeaf;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
+        .constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
@@ -108,7 +111,7 @@
         int charPositionInLine = ctx.getStart().getCharPositionInLine();
         detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_DATA);
 
-        YangLeaf leaf = new YangLeaf();
+        YangLeaf leaf = getYangLeaf(JAVA_GENERATION);
         leaf.setLeafName(identifier);
 
         Parsable tmpData = listener.getParsedDataStack().peek();
@@ -142,7 +145,7 @@
             listener.getParsedDataStack().pop();
         } else {
             throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_DATA,
-                            ctx.identifier().getText(), EXIT));
+                    ctx.identifier().getText(), EXIT));
         }
     }
 
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
index b611d6e..416ce91 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
+++ b/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.ResolutionType;
 import org.onosproject.yangutils.datamodel.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
 import org.onosproject.yangutils.datamodel.YangLeaf;
@@ -34,11 +33,14 @@
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
 import org.onosproject.yangutils.utils.YangConstructType;
 
+import static org.onosproject.yangutils.datamodel.ResolvableStatus.UNRESOLVED;
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
+        .constructExtendedListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
+        .constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
@@ -123,17 +125,15 @@
                                 ctx.string().getText(), EXIT));
                     }
 
-                    // Get the prefix information
-                    String prefix = ((YangType<?>) type).getPrefix();
-
                     // Create empty derived info and attach it to type extended info.
                     YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
                     ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
 
+                    type.setResolvableStatus(UNRESOLVED);
+
                     // Add resolution information to the list
                     YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
-                            ResolutionType.TYPEDEF_RESOLUTION, (YangNode) parentNodeOfLeaf, prefix, errorLine,
-                            errorPosition);
+                            (YangNode) parentNodeOfLeaf, errorLine, errorPosition);
                     addToResolutionList(resolutionInfo, ctx);
                 }
                 break;
@@ -165,9 +165,9 @@
                     ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
 
                     // Add resolution information to the list
-                    YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
-                            ResolutionType.TYPEDEF_RESOLUTION, (YangNode) parentNodeOfLeafList, prefix, errorLine,
-                            errorPosition);
+                    YangResolutionInfo resolutionInfo =
+                            new YangResolutionInfo<YangType>(type, (YangNode) parentNodeOfLeafList, errorLine,
+                                    errorPosition);
                     addToResolutionList(resolutionInfo, ctx);
                 }
                 break;
@@ -201,8 +201,8 @@
                     ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
 
                     // Add resolution information to the list
-                    YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
-                            ResolutionType.TYPEDEF_RESOLUTION, (YangNode) typeDef, prefix, errorLine, errorPosition);
+                    YangResolutionInfo resolutionInfo =
+                            new YangResolutionInfo<YangType>(type, (YangNode) typeDef, errorLine, errorPosition);
                     addToResolutionList(resolutionInfo, ctx);
                 }
                 break;
@@ -244,7 +244,7 @@
      * @param ctx context object of the grammar rule
      */
     private static void addToResolutionList(YangResolutionInfo<YangType> resolutionInfo,
-                                            GeneratedYangParser.TypeStatementContext ctx) {
+            GeneratedYangParser.TypeStatementContext ctx) {
         try {
             addResolutionInfo(resolutionInfo);
         } catch (DataModelException e) {
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java b/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
index ffb50e9..150e0d1 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
+++ b/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
@@ -205,7 +205,7 @@
 
         Calendar date = Calendar.getInstance();
         SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
-        String dateForRevision = ((dateFormat.format(date.getTime())).replaceAll(SLASH, HYPHEN)).replaceAll(SPACE,
+        String dateForRevision = dateFormat.format(date.getTime()).replaceAll(SLASH, HYPHEN).replaceAll(SPACE,
                 EMPTY_STRING);
         return dateForRevision;
     }
@@ -218,8 +218,8 @@
      * @param ctx yang construct's context to get the line number and character position
      * @return valid node identifier
      */
-    public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString, YangConstructType
-            yangConstruct, ParserRuleContext ctx) {
+    public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
+            YangConstructType yangConstruct, ParserRuleContext ctx) {
         String tmpIdentifierString = removeQuotesAndHandleConcat(nodeIdentifierString);
         String[] tmpData = tmpIdentifierString.split(Pattern.quote(COLON));
         if (tmpData.length == 1) {