You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by cc...@apache.org on 2018/05/23 19:28:13 UTC
[05/10] groovy git commit: Optimize StringBuilder#leftShift for
GString case
Optimize StringBuilder#leftShift for GString case
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/f810c805
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/f810c805
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/f810c805
Branch: refs/heads/master
Commit: f810c805922155988395ee1f996530987b0b71f6
Parents: af7605f
Author: Cedric Champeau <cc...@apache.org>
Authored: Wed May 23 11:03:47 2018 +0200
Committer: Cedric Champeau <cc...@apache.org>
Committed: Wed May 23 11:03:47 2018 +0200
----------------------------------------------------------------------
.../groovy/vmplugin/v5/PluginDefaultGroovyMethods.java | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/f810c805/src/main/java/org/codehaus/groovy/vmplugin/v5/PluginDefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v5/PluginDefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/vmplugin/v5/PluginDefaultGroovyMethods.java
index 208e815..39a5e71 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v5/PluginDefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v5/PluginDefaultGroovyMethods.java
@@ -19,6 +19,7 @@
package org.codehaus.groovy.vmplugin.v5;
import groovy.lang.EmptyRange;
+import groovy.lang.GString;
import groovy.lang.IntRange;
import org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport;
import org.codehaus.groovy.runtime.InvokerHelper;
@@ -96,10 +97,16 @@ public class PluginDefaultGroovyMethods extends DefaultGroovyMethodsSupport {
* @return the StringBuilder on which this operation was invoked
*/
public static StringBuilder leftShift(StringBuilder self, Object value) {
- if (value instanceof CharSequence)
+ if (value instanceof GString) {
+ // Force the conversion of the GString to string now, or appending
+ // is going to be extremely expensive, due to calls to GString#charAt,
+ // which is going to re-evaluate the GString for each character!
+ return self.append(value.toString());
+ } else if (value instanceof CharSequence) {
return self.append((CharSequence)value);
- else
+ } else {
return self.append(value);
+ }
}
/**