Merge "Make Yang compilation error more readable"
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java
index ffff64d..10c4b6f 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java
@@ -30,6 +30,8 @@
 import org.onosproject.yang.compiler.translator.exception.TranslatorException;
 import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
 
+import com.google.common.base.Throwables;
+
 import java.io.IOException;
 
 import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
@@ -136,7 +138,8 @@
                 } catch (Exception e) {
                     e.printStackTrace();
                     close(codeGenNode, yangPlugin, rootNode);
-                    throw new TranslatorException(e.getMessage());
+                    Throwables.propagateIfInstanceOf(e, TranslatorException.class);
+                    throw new TranslatorException(e);
                 }
                 curTraversal = SIBLING;
                 codeGenNode = codeGenNode.getNextSibling();
@@ -148,7 +151,8 @@
                 } catch (Exception e) {
                     e.printStackTrace();
                     close(codeGenNode, yangPlugin, rootNode);
-                    throw new TranslatorException(e.getMessage());
+                    Throwables.propagateIfInstanceOf(e, TranslatorException.class);
+                    throw new TranslatorException(e);
                 }
                 curTraversal = PARENT;
                 codeGenNode = codeGenNode.getParent();
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
index bad19ff..1d0b7c3 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
@@ -119,7 +119,7 @@
             tempFileHandle.getEnumTempFiles().setEnumClass(true);
         } catch (IOException e) {
             throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
-                                                      e.getLocalizedMessage()));
+                                                      e.getLocalizedMessage()), e);
         }
     }
 
@@ -134,7 +134,7 @@
             generateJava(GENERATE_ENUM_CLASS, this);
         } catch (IOException e) {
             throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
-                                                      e.getLocalizedMessage()));
+                                                      e.getLocalizedMessage()), e);
         }
     }
 }
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java
index 7ffbbe7..030674c 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java
@@ -116,8 +116,8 @@
                     "Failed to prepare generate code entry for list node " +
                             getName() + " in " +
                             getLineNumber() + " at " +
-                            getCharPosition()
-                            + " in " + getFileName() + " " + e.getLocalizedMessage());
+                            getCharPosition() +
+                            " in " + getFileName(), e);
         }
     }
 
@@ -134,8 +134,8 @@
             throw new TranslatorException("Failed to generate code for list node " +
                                                   getName() + " in " +
                                                   getLineNumber() + " at " +
-                                                  getCharPosition()
-                                                  + " in " + getFileName() + " " + e.getLocalizedMessage());
+                                                  getCharPosition() +
+                                                  " in " + getFileName(), e);
         }
     }
 }
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
index 1caf6e8..80f5c65 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
@@ -138,8 +138,9 @@
         } catch (IOException e) {
             throw new TranslatorException(
                     "Failed to prepare generate code entry for typedef node " + getName()
-                            + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
-                            + " " + e.getLocalizedMessage());
+                            + " in " + getLineNumber() +
+                            " at " + getCharPosition() +
+                            " in " + getFileName(), e);
         }
     }
 
@@ -155,8 +156,9 @@
         } catch (IOException e) {
             throw new TranslatorException(
                     "Failed to prepare generate code for typedef node " + getName()
-                            + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
-                            + " " + e.getLocalizedMessage());
+                            + " in " + getLineNumber() +
+                            " at " + getCharPosition() +
+                            " in " + getFileName(), e);
         }
     }
 }
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
index c7554cb..f38c90b 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -352,7 +352,8 @@
             throws IOException {
 
         if (file.exists()) {
-            throw new IOException(" file " + file.getName() + " is already generated." +
+            throw new IOException(" file " + file.getName() + " is already generated for "
+                    + className + " @ " + pkg + "\n" +
                                           ERROR_MSG_FOR_GEN_CODE);
         }
 
@@ -366,7 +367,7 @@
             appendContents(file, className, genType, imports, pkg);
         } catch (IOException e) {
             throw new IOException("Failed to append contents in " + file.getName() +
-                                          " class file.");
+                                          " class file.", e);
         }
     }
 
@@ -386,7 +387,8 @@
             throws IOException {
 
         if (file.exists()) {
-            throw new IOException(" file " + file.getName() + " is already generated." +
+            throw new IOException(" file " + file.getName() +
+                                  " is already generated for: " + name + "\n" +
                                           ERROR_MSG_FOR_GEN_CODE);
         }
         boolean isFileCreated;
@@ -399,7 +401,7 @@
             appendContents(file, genType, imports, curNode, name);
         } catch (IOException e) {
             throw new IOException("Failed to append contents in " + file.getName() +
-                                          " class file.");
+                                          " class file.", e);
         }
     }
 
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java
index 7a52893..87724bc 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -185,7 +185,7 @@
                                    false);
                 }
             } catch (IOException e) {
-                throw new IOException("failed to create package-info file");
+                throw new IOException("failed to create package-info file for " + pkg, e);
             }
         }
     }
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
index 70bd660..dfc3bf0 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
@@ -1692,8 +1692,8 @@
      * Static attribute for error msg.
      */
     public static final String ERROR_MSG_FOR_GEN_CODE = "please check whether " +
-            "multiple yang" + " files has same module/submodule" +
-            " \"name\" and \"namespace\"" + "or You may have generated code of" +
+            "multiple yang files has same module/submodule" +
+            " \"name\" and \"namespace\" or You may have generated code of" +
             " previous build present in your directory.";
 
     /**
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java
index 2d6913f..2c88a2e 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java
@@ -139,7 +139,7 @@
             fileWriter.close();
         } catch (IOException e) {
             throw new IOException("Exception occurred while creating package info" +
-                                          " file.");
+                                          " file.", e);
         }
     }
 
@@ -184,7 +184,7 @@
             } catch (IOException e) {
                 throw new IOException(
                         "Failed to delete the generated files in " +
-                                generatedDirectory + " directory");
+                                generatedDirectory + " directory", e);
             }
         }
     }
@@ -333,7 +333,7 @@
         try {
             FileSystemUtil.updateFileHandle(file, data, false);
         } catch (IOException e) {
-            throw new IOException("Failed to insert in " + file + "file");
+            throw new IOException("Failed to insert in " + file + "file", e);
         }
     }
 
diff --git a/model/src/test/java/org/onosproject/yang/model/ResourceIdTest.java b/model/src/test/java/org/onosproject/yang/model/ResourceIdTest.java
index cdfdb1a..f6fb475 100644
--- a/model/src/test/java/org/onosproject/yang/model/ResourceIdTest.java
+++ b/model/src/test/java/org/onosproject/yang/model/ResourceIdTest.java
@@ -22,6 +22,8 @@
 
 public class ResourceIdTest {
 
+    private static final ResourceId EMPTY =
+            ResourceId.builder().build();
     private static final ResourceId ROOT =
             ResourceId.builder().addBranchPointSchema("/", "").build();
     ResourceId ridA;
@@ -43,6 +45,7 @@
         new EqualsTester()
         .addEqualityGroup(ridA, ridAcopy)
         .addEqualityGroup(ROOT)
+        .addEqualityGroup(EMPTY)
         .testEquals();
     }