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]