[ONOS-5058][ONOS-4796][ONOS-4893]compiler annotation implementation + defect fix

Change-Id: Ie317409d9ab1d36e626433558b2d51f26daaac82
diff --git a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListenerTest.java b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListenerTest.java
deleted file mode 100644
index cbc4009..0000000
--- a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListenerTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangAppDataStructure;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for compiler annotation listener.
- */
-public class CompilerAnnotationListenerTest {
-
-    private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
-    /**
-     * Checks valid compiler annotation statements.
-     */
-    @Test
-    public void processValidCompilerAnnotation() throws IOException, ParserException {
-
-        YangNode node = manager.getDataModel("src/test/resources/ValidCompilerAnnotation.yang");
-
-        // Check whether the data model tree returned is of type module.
-        assertThat((node instanceof YangModule), is(true));
-
-        // Check whether the node type is set properly to module.
-        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
-        // Check whether the module name is set correctly.
-        YangModule yangNode = (YangModule) node;
-        assertThat(yangNode.getName(), is("event"));
-
-        YangCompilerAnnotation compilerAnnotation = yangNode.getCompilerAnnotationList()
-                .iterator().next();
-        assertThat(compilerAnnotation.getPrefix(), is("ca"));
-        assertThat(compilerAnnotation.getPath(), is("/candidate-servers/server"));
-
-        YangAppDataStructure appDataStructure = compilerAnnotation.getYangAppDataStructure();
-        assertThat(appDataStructure.getPrefix(), is("abc"));
-        assertThat(appDataStructure.getDataStructure(), is(YangDataStructure.MAP));
-
-        assertThat(appDataStructure.getKeyList().iterator().next(), is("name"));
-    }
-}
diff --git a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java
index b6b497a..60da95e 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java
@@ -21,6 +21,8 @@
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.onosproject.yangutils.datamodel.YangContainer;
+import org.onosproject.yangutils.datamodel.YangLeafRef;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangLeaf;
 import org.onosproject.yangutils.datamodel.YangLeafList;
@@ -147,4 +149,25 @@
         assertThat(leafInfo.getDataType().getDataTypeName(), is("instance-identifier"));
         assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
     }
+
+    /**
+     * Checks for leaf ref path concatenation.
+     */
+    @Test
+    public void processLeafRefPathConcatenation() throws IOException, ParserException {
+
+        YangNode node = manager
+                .getDataModel("src/test/resources/leafRefPathConcatenation.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("test"));
+
+        YangTypeDef typeDef = (YangTypeDef) yangNode.getChild();
+        assertThat(typeDef.getName(), is("isis-instance-state-ref"));
+        assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.LEAFREF));
+        YangLeafRef leafRef = ((YangLeafRef) typeDef.getTypeDefBaseType().getDataTypeExtendedInfo());
+        assertThat(leafRef.getPath(), is("/isis-prefix-ipv4-std/default-metric"));
+    }
 }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
index e5021d3..9413e3c 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
@@ -103,23 +103,23 @@
     public void testForJavaAttributeInfo() {
 
         String attributeWithoutTypePkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
-                false, PRIVATE);
+                false, PRIVATE, null);
         assertThat(true, is(attributeWithoutTypePkg.equals(
                 PRIVATE + SPACE + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLAN + NEW_LINE)));
 
         String attributeWithTypePkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
-                false, PRIVATE);
+                false, PRIVATE, null);
         assertThat(true, is(attributeWithTypePkg.equals(PRIVATE + SPACE + JAVA_LANG + PERIOD
                 + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLAN + NEW_LINE)));
 
         String attributeWithListPkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
-                true, PRIVATE);
+                true, PRIVATE, null);
         assertThat(true, is(attributeWithListPkg.contains(
                 PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + JAVA_LANG + PERIOD + STRING_DATA_TYPE
                         + DIAMOND_CLOSE_BRACKET + SPACE + YANG_NAME)));
 
         String attributeWithListWithoutPkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
-                true, PRIVATE);
+                true, PRIVATE, null);
         assertThat(true, is(attributeWithListWithoutPkg.contains(
                 PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + STRING_DATA_TYPE + DIAMOND_CLOSE_BRACKET + SPACE
                         + YANG_NAME)));
diff --git a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
index cbac365..9579b7d 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
@@ -221,7 +221,7 @@
      */
     @Test
     public void getGetterForInterfaceTest() {
-        String method = getGetterForInterface(CLASS_NAME, STRING_DATA_TYPE, false, GENERATE_SERVICE_AND_MANAGER);
+        String method = getGetterForInterface(CLASS_NAME, STRING_DATA_TYPE, false, GENERATE_SERVICE_AND_MANAGER, null);
         assertThat(true, is(method.contains(STRING_DATA_TYPE + SPACE + GET_METHOD_PREFIX)));
     }
 
@@ -244,7 +244,7 @@
     @Test
     public void getSetterForInterfaceTest() {
         String method = getSetterForInterface(CLASS_NAME, STRING_DATA_TYPE, CLASS_NAME, false,
-                GENERATE_SERVICE_AND_MANAGER);
+                GENERATE_SERVICE_AND_MANAGER, null);
         assertThat(true, is(method.contains(VOID + SPACE +
                 SET_METHOD_PREFIX + "Testname")));
     }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java b/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java
index e229fed..eb2a674 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java
@@ -56,7 +56,7 @@
      */
     @Test
     public void builderClassGenerationTest() {
-        String builderClassJavaDoc = getJavaDoc(BUILDER_CLASS, TEST_NAME, false, getStubPluginConfig());
+        String builderClassJavaDoc = getJavaDoc(BUILDER_CLASS, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true, is(builderClassJavaDoc.contains("Represents the builder implementation of")
                 && builderClassJavaDoc.contains(END_STRING)));
     }
@@ -66,7 +66,7 @@
      */
     @Test
     public void builderInterfaceGenerationTest() {
-        String builderInterfaceJavaDoc = getJavaDoc(BUILDER_INTERFACE, TEST_NAME, false, getStubPluginConfig());
+        String builderInterfaceJavaDoc = getJavaDoc(BUILDER_INTERFACE, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(builderInterfaceJavaDoc.contains("Builder for")
                         && builderInterfaceJavaDoc.contains(END_STRING)));
@@ -77,7 +77,7 @@
      */
     @Test
     public void buildGenerationTest() {
-        String buildDoc = getJavaDoc(BUILD_METHOD, TEST_NAME, false, getStubPluginConfig());
+        String buildDoc = getJavaDoc(BUILD_METHOD, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true, is(buildDoc.contains("Builds object of") && buildDoc.contains(END_STRING)));
     }
 
@@ -109,7 +109,7 @@
      */
     @Test
     public void constructorGenerationTest() {
-        String constructorDoc = getJavaDoc(CONSTRUCTOR, TEST_NAME, false, getStubPluginConfig());
+        String constructorDoc = getJavaDoc(CONSTRUCTOR, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(constructorDoc.contains("Creates an instance of ")
                         && constructorDoc.contains("builder object of")
@@ -121,7 +121,7 @@
      */
     @Test
     public void defaultConstructorGenerationTest() {
-        String defaultConstructorDoc = getJavaDoc(DEFAULT_CONSTRUCTOR, TEST_NAME, false, getStubPluginConfig());
+        String defaultConstructorDoc = getJavaDoc(DEFAULT_CONSTRUCTOR, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true, is(defaultConstructorDoc.contains("Creates an instance of ")
                 && defaultConstructorDoc.contains(END_STRING)));
     }
@@ -131,7 +131,7 @@
      */
     @Test
     public void getterGenerationTest() {
-        String getterJavaDoc = getJavaDoc(GETTER_METHOD, TEST_NAME, false, getStubPluginConfig());
+        String getterJavaDoc = getJavaDoc(GETTER_METHOD, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(getterJavaDoc.contains("Returns the attribute") && getterJavaDoc.contains(END_STRING)));
     }
@@ -141,7 +141,7 @@
      */
     @Test
     public void implClassGenerationTest() {
-        String implClassJavaDoc = getJavaDoc(IMPL_CLASS, TEST_NAME, false, getStubPluginConfig());
+        String implClassJavaDoc = getJavaDoc(IMPL_CLASS, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(implClassJavaDoc.contains("Represents the implementation of")
                         && implClassJavaDoc.contains(END_STRING)));
@@ -152,7 +152,7 @@
      */
     @Test
     public void interfaceGenerationTest() {
-        String interfaceJavaDoc = getJavaDoc(INTERFACE, TEST_NAME, false, getStubPluginConfig());
+        String interfaceJavaDoc = getJavaDoc(INTERFACE, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(interfaceJavaDoc.contains("Abstraction of an entity which represents the functionality of")
                         && interfaceJavaDoc.contains(END_STRING)));
@@ -163,7 +163,7 @@
      */
     @Test
     public void packageInfoGenerationTest() {
-        String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, false, getStubPluginConfig());
+        String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(packageInfo.contains("Implementation of YANG node") && packageInfo.contains(END_STRING)));
     }
@@ -173,7 +173,7 @@
      */
     @Test
     public void packageInfoGenerationForChildNodeTest() {
-        String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, true, getStubPluginConfig());
+        String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, true, getStubPluginConfig(), null);
         assertThat(true, is(packageInfo.contains("Implementation of YANG node testName's children nodes")
                 && packageInfo.contains(END_STRING)));
     }
@@ -183,7 +183,7 @@
      */
     @Test
     public void setterGenerationTest() {
-        String setterJavaDoc = getJavaDoc(SETTER_METHOD, TEST_NAME, false, getStubPluginConfig());
+        String setterJavaDoc = getJavaDoc(SETTER_METHOD, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true,
                 is(setterJavaDoc.contains("Returns the builder object of") && setterJavaDoc.contains(END_STRING)));
     }
@@ -193,7 +193,7 @@
      */
     @Test
     public void typeDefSetterGenerationTest() {
-        String typeDefSetter = getJavaDoc(TYPE_DEF_SETTER_METHOD, TEST_NAME, false, getStubPluginConfig());
+        String typeDefSetter = getJavaDoc(TYPE_DEF_SETTER_METHOD, TEST_NAME, false, getStubPluginConfig(), null);
         assertThat(true, is(typeDefSetter.contains("Sets the value of") && typeDefSetter.contains(END_STRING)));
     }
 
diff --git a/plugin/src/test/resources/ValidCompilerAnnotation.yang b/plugin/src/test/resources/ValidCompilerAnnotation.yang
deleted file mode 100644
index 7913fab..0000000
--- a/plugin/src/test/resources/ValidCompilerAnnotation.yang
+++ /dev/null
@@ -1,13 +0,0 @@
-module event {
-
-    namespace "http://example.com/event";
-    prefix "ev";
-
-    ca:compiler-annotation "/candidate-servers/server" {
-        abc:app-data-structure "map" {
-            ca:key "name";
-        }
-       xyz:app-extended-name "special-server";
-    }
-}
-
diff --git a/plugin/src/test/resources/leafRefPathConcatenation.yang b/plugin/src/test/resources/leafRefPathConcatenation.yang
new file mode 100644
index 0000000..a9b688e
--- /dev/null
+++ b/plugin/src/test/resources/leafRefPathConcatenation.yang
@@ -0,0 +1,20 @@
+module test {
+    namespace "urn:ietf:params:xml:ns:yang:ietf-isis";
+    prefix isis;
+    typedef isis-instance-state-ref {
+        type leafref {
+            path "/isis-prefix-ipv4-std/"
+            +"default-metric";
+        }
+    }
+    container isis-route-content {
+        leaf metric {
+            type isis-instance-state-ref ;
+        }
+    }
+    container isis-prefix-ipv4-std {
+        leaf default-metric {
+            type string;
+        }
+    }
+}
\ No newline at end of file