Author: henning
Date: Sun Oct 30 06:53:35 2005
New Revision: 329577

URL: http://svn.apache.org/viewcvs?rev=329577&view=rev
Log:
Update getMessage() method, removing the ugly string concats,
replacing them with StringBuffer.

add line, column, template information in any case if it is available.



Modified:
    
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/directive/MacroParseException.java
    
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/TemplateParseException.java

Modified: 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/directive/MacroParseException.java
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/directive/MacroParseException.java?rev=329577&r1=329576&r2=329577&view=diff
==============================================================================
--- 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/directive/MacroParseException.java
 (original)
+++ 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/directive/MacroParseException.java
 Sun Oct 30 06:53:35 2005
@@ -38,7 +38,7 @@
     /**
      * Version Id for serializable
      */
-    private static final long serialVersionUID = -4985224672336070690L;
+    private static final long serialVersionUID = -4985224672336070689L;
 
     public MacroParseException(final String msg, final String templateName, 
final Token currentToken)
     {
@@ -83,5 +83,101 @@
         {
             return -1;
         }
+    }
+
+    /**
+     * This method has the standard behavior when this object has been
+     * created using the standard constructors.  Otherwise, it uses
+     * "currentToken" and "expectedTokenSequences" to generate a parse
+     * error message and returns it.  If this object has been created
+     * due to a parse error, and you do not catch it (it gets thrown
+     * from the parser), then this method is called during the printing
+     * of the final stack trace, and hence the correct error message
+     * gets displayed.
+     */
+    public String getMessage()
+    {
+        if (!specialConstructor)
+        {
+            StringBuffer sb = new StringBuffer(super.getMessage());
+            appendTemplateInfo(sb);
+            return sb.toString();
+        }
+
+        int maxSize = 0;
+
+        StringBuffer expected = new StringBuffer();
+
+        for (int i = 0; i < expectedTokenSequences.length; i++)
+        {
+            if (maxSize < expectedTokenSequences[i].length)
+            {
+                maxSize = expectedTokenSequences[i].length;
+            }
+
+            for (int j = 0; j < expectedTokenSequences[i].length; j++)
+            {
+                
expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
+            }
+
+            if (expectedTokenSequences[i][expectedTokenSequences[i].length - 
1] != 0)
+            {
+                expected.append("...");
+            }
+
+            expected.append(eol).append("    ");
+        }
+
+        StringBuffer retval = new StringBuffer("Encountered \"");
+        Token tok = currentToken.next;
+
+        for (int i = 0; i < maxSize; i++)
+        {
+            if (i != 0)
+            {
+                retval.append(" ");
+            }
+
+            if (tok.kind == 0)
+            {
+                retval.append(tokenImage[0]);
+                break;
+            }
+
+            retval.append(add_escapes(tok.image));
+            tok = tok.next;
+        }
+
+        retval.append("\"");
+        appendTemplateInfo(retval);
+
+        if (expectedTokenSequences.length == 1)
+        {
+            retval.append("Was expecting:").append(eol).append("    ");
+        }
+        else
+        {
+            retval.append("Was expecting one of:").append(eol).append("    ");
+        }
+
+        // avoid JDK 1.3 StringBuffer.append(Object o) vs 1.4 
StringBuffer.append(StringBuffer sb) gotcha.
+        retval.append(expected.toString());
+        return retval.toString();
+    }
+
+    protected void appendTemplateInfo(final StringBuffer sb)
+    {
+        sb.append(" at line ").append(getLineNumber())
+          .append(", column ").append(getColumnNumber());
+
+        if (getTemplateName() != null)
+        {
+            sb.append(" of ").append(getTemplateName());
+        }
+        else
+        {
+            sb.append(".");
+        }
+        sb.append(eol);
     }
 }

Modified: 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/TemplateParseException.java
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/TemplateParseException.java?rev=329577&r1=329576&r2=329577&view=diff
==============================================================================
--- 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/TemplateParseException.java
 (original)
+++ 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/TemplateParseException.java
 Sun Oct 30 06:53:35 2005
@@ -144,12 +144,15 @@
     {
         if (!specialConstructor)
         {
-            return super.getMessage();
+            StringBuffer sb = new StringBuffer(super.getMessage());
+            appendTemplateInfo(sb);
+            return sb.toString();
         }
 
-        String expected = "";
         int maxSize = 0;
 
+        StringBuffer expected = new StringBuffer();
+
         for (int i = 0; i < expectedTokenSequences.length; i++)
         {
             if (maxSize < expectedTokenSequences[i].length)
@@ -159,52 +162,67 @@
 
             for (int j = 0; j < expectedTokenSequences[i].length; j++)
             {
-                expected += (tokenImage[expectedTokenSequences[i][j]] + " ");
+                
expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
             }
 
             if (expectedTokenSequences[i][expectedTokenSequences[i].length - 
1] != 0)
             {
-                expected += "...";
+                expected.append("...");
             }
 
-            expected += (eol + "    ");
+            expected.append(eol).append("    ");
         }
 
-        String retval = "Encountered \"";
+        StringBuffer retval = new StringBuffer("Encountered \"");
         Token tok = currentToken.next;
 
         for (int i = 0; i < maxSize; i++)
         {
             if (i != 0)
             {
-                retval += " ";
+                retval.append(" ");
             }
 
             if (tok.kind == 0)
             {
-                retval += tokenImage[0];
-
+                retval.append(tokenImage[0]);
                 break;
             }
 
-            retval += add_escapes(tok.image);
+            retval.append(add_escapes(tok.image));
             tok = tok.next;
         }
 
-        retval += ("\" at line " + currentToken.next.beginLine + ", column " + 
currentToken.next.beginColumn);
-        retval += (templateName != null) ? (" of " + templateName + eol) : 
("." + eol);
+        retval.append("\"");
+        appendTemplateInfo(retval);
 
         if (expectedTokenSequences.length == 1)
         {
-            retval += ("Was expecting:" + eol + "    ");
+            retval.append("Was expecting:").append(eol).append("    ");
         }
         else
         {
-            retval += ("Was expecting one of:" + eol + "    ");
+            retval.append("Was expecting one of:").append(eol).append("    ");
         }
 
-        retval += expected;
+        // avoid JDK 1.3 StringBuffer.append(Object o) vs 1.4 
StringBuffer.append(StringBuffer sb) gotcha.
+        retval.append(expected.toString());
+        return retval.toString();
+    }
+
+    protected void appendTemplateInfo(final StringBuffer sb)
+    {
+        sb.append(" at line ").append(getLineNumber())
+          .append(", column ").append(getColumnNumber());
 
-        return retval;
+        if (getTemplateName() != null)
+        {
+            sb.append(" of ").append(getTemplateName());
+        }
+        else
+        {
+            sb.append(".");
+        }
+        sb.append(eol);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to