[ http://issues.apache.org/jira/browse/VELOCITY-316?page=all ]
Will Glass-Husain updated VELOCITY-316:
---------------------------------------
Bugzilla Id: (was: 32179)
Fix Version: 2.0
Description:
CharSequence is a nice addition to the Java API,
helping to encapsulate implementation details
and allowing programmers to use StringBuffer,
mutable strings (such as
http://mg4j.dsi.unimi.it/docs/it/unimi/dsi/mg4j/util/MutableString.html )
or even their custom classes directly
instead of costly process of converting everything into a String.
One of the remaining drawbacks of the CharSequence
is the lack of support for the Object#equals method.
Fortunately, in Velocity it can be easily fixed
in the ASTEQNode and ASTNENode classes.
Example of the fix is provided in the following patches.
--- org/apache/velocity/runtime/parser/node/original/ASTEQNode.java Wed Apr
14 09:26:42 2004
+++ org/apache/velocity/runtime/parser/node/ASTEQNode.java Thu Nov 11
14:21:
03 2004
@@ -101,6 +101,20 @@
}
else
{
+
+ /*
+ * Comparison of CharSequence objects.
+ */
+ if (left instanceof CharSequence && right instanceof CharSequence)
+ {
+ final CharSequence a = (CharSequence) left;
+ final CharSequence b = (CharSequence) right;
+ final int aLen = a.length(); final int bLen = b.length();
+ if( aLen != bLen ) return false;
+ int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n )
) return false;
+ return true;
+ }
+
rsvc.error("Error in evaluation of == expression."
+ " Both arguments must be of the same Class."
+ " Currently left = " + left.getClass() + ", right
=
"
--- org/apache/velocity/runtime/parser/node/original/ASTNENode.java Wed Apr
14 09:26:42 2004
+++ org/apache/velocity/runtime/parser/node/ASTNENode.java Thu Nov 11
14:22:
04 2004
@@ -74,6 +74,20 @@
}
else
{
+
+ /*
+ * Comparison of CharSequence objects.
+ */
+ if (left instanceof CharSequence && right instanceof CharSequence)
+ {
+ final CharSequence a = (CharSequence) left;
+ final CharSequence b = (CharSequence) right;
+ final int aLen = a.length(); final int bLen = b.length();
+ if( aLen != bLen ) return true;
+ int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n )
) return true;
+ return false;
+ }
+
rsvc.error("Error in evaluation of != expression."
+ " Both arguments must be of the same Class."
+ " Currently left = " + left.getClass() + ", right
=
"
The additional check should not have any performance impact,
since it is performed where the 'Both arguments must be of the same Class'
error was.
I really hope Velocity will incorporate at least that minimal
support for CharSequence, making Java environment
to be a lot friendlier to some of us.
was:
CharSequence is a nice addition to the Java API,
helping to encapsulate implementation details
and allowing programmers to use StringBuffer,
mutable strings (such as
http://mg4j.dsi.unimi.it/docs/it/unimi/dsi/mg4j/util/MutableString.html )
or even their custom classes directly
instead of costly process of converting everything into a String.
One of the remaining drawbacks of the CharSequence
is the lack of support for the Object#equals method.
Fortunately, in Velocity it can be easily fixed
in the ASTEQNode and ASTNENode classes.
Example of the fix is provided in the following patches.
--- org/apache/velocity/runtime/parser/node/original/ASTEQNode.java Wed Apr
14 09:26:42 2004
+++ org/apache/velocity/runtime/parser/node/ASTEQNode.java Thu Nov 11
14:21:
03 2004
@@ -101,6 +101,20 @@
}
else
{
+
+ /*
+ * Comparison of CharSequence objects.
+ */
+ if (left instanceof CharSequence && right instanceof CharSequence)
+ {
+ final CharSequence a = (CharSequence) left;
+ final CharSequence b = (CharSequence) right;
+ final int aLen = a.length(); final int bLen = b.length();
+ if( aLen != bLen ) return false;
+ int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n )
) return false;
+ return true;
+ }
+
rsvc.error("Error in evaluation of == expression."
+ " Both arguments must be of the same Class."
+ " Currently left = " + left.getClass() + ", right
=
"
--- org/apache/velocity/runtime/parser/node/original/ASTNENode.java Wed Apr
14 09:26:42 2004
+++ org/apache/velocity/runtime/parser/node/ASTNENode.java Thu Nov 11
14:22:
04 2004
@@ -74,6 +74,20 @@
}
else
{
+
+ /*
+ * Comparison of CharSequence objects.
+ */
+ if (left instanceof CharSequence && right instanceof CharSequence)
+ {
+ final CharSequence a = (CharSequence) left;
+ final CharSequence b = (CharSequence) right;
+ final int aLen = a.length(); final int bLen = b.length();
+ if( aLen != bLen ) return true;
+ int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n )
) return true;
+ return false;
+ }
+
rsvc.error("Error in evaluation of != expression."
+ " Both arguments must be of the same Class."
+ " Currently left = " + left.getClass() + ", right
=
"
The additional check should not have any performance impact,
since it is performed where the 'Both arguments must be of the same Class'
error was.
I really hope Velocity will incorporate at least that minimal
support for CharSequence, making Java environment
to be a lot friendlier to some of us.
Environment:
Operating System: All
Platform: All
was:
Operating System: All
Platform: All
Assign To: (was: Velocity-Dev List)
Thanks for contributing this. Looks useful. Unfortunately, we're aiming for a
JDK 1.3 compatibility, so can't include this. I'll leave the bug open and mark
it as a "2.0" feature which our catch-all for interesting but not quite
compatible changes.
> Workaround the lack of equality in CharSequence.
> ------------------------------------------------
>
> Key: VELOCITY-316
> URL: http://issues.apache.org/jira/browse/VELOCITY-316
> Project: Velocity
> Type: Improvement
> Components: Source
> Versions: 1.4
> Environment: Operating System: All
> Platform: All
> Reporter: ArtemGr
> Priority: Minor
> Fix For: 2.0
>
> CharSequence is a nice addition to the Java API,
> helping to encapsulate implementation details
> and allowing programmers to use StringBuffer,
> mutable strings (such as
> http://mg4j.dsi.unimi.it/docs/it/unimi/dsi/mg4j/util/MutableString.html )
> or even their custom classes directly
> instead of costly process of converting everything into a String.
> One of the remaining drawbacks of the CharSequence
> is the lack of support for the Object#equals method.
> Fortunately, in Velocity it can be easily fixed
> in the ASTEQNode and ASTNENode classes.
> Example of the fix is provided in the following patches.
> --- org/apache/velocity/runtime/parser/node/original/ASTEQNode.java Wed Apr
> 14 09:26:42 2004
> +++ org/apache/velocity/runtime/parser/node/ASTEQNode.java Thu Nov 11
> 14:21:
> 03 2004
> @@ -101,6 +101,20 @@
> }
> else
> {
> +
> + /*
> + * Comparison of CharSequence objects.
> + */
> + if (left instanceof CharSequence && right instanceof CharSequence)
> + {
> + final CharSequence a = (CharSequence) left;
> + final CharSequence b = (CharSequence) right;
> + final int aLen = a.length(); final int bLen = b.length();
> + if( aLen != bLen ) return false;
> + int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n
> )
> ) return false;
> + return true;
> + }
> +
> rsvc.error("Error in evaluation of == expression."
> + " Both arguments must be of the same Class."
> + " Currently left = " + left.getClass() + ",
> right =
> "
> --- org/apache/velocity/runtime/parser/node/original/ASTNENode.java Wed Apr
> 14 09:26:42 2004
> +++ org/apache/velocity/runtime/parser/node/ASTNENode.java Thu Nov 11
> 14:22:
> 04 2004
> @@ -74,6 +74,20 @@
> }
> else
> {
> +
> + /*
> + * Comparison of CharSequence objects.
> + */
> + if (left instanceof CharSequence && right instanceof CharSequence)
> + {
> + final CharSequence a = (CharSequence) left;
> + final CharSequence b = (CharSequence) right;
> + final int aLen = a.length(); final int bLen = b.length();
> + if( aLen != bLen ) return true;
> + int n = aLen; while( 0 != n-- ) if( a.charAt( n ) != b.charAt( n
> )
> ) return true;
> + return false;
> + }
> +
> rsvc.error("Error in evaluation of != expression."
> + " Both arguments must be of the same Class."
> + " Currently left = " + left.getClass() + ",
> right =
> "
> The additional check should not have any performance impact,
> since it is performed where the 'Both arguments must be of the same Class'
> error was.
> I really hope Velocity will incorporate at least that minimal
> support for CharSequence, making Java environment
> to be a lot friendlier to some of us.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]