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:30:42 UTC

[7/9] 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/e9cb3afc
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e9cb3afc
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e9cb3afc

Branch: refs/heads/GROOVY_2_6_X
Commit: e9cb3afcab73657dd68d3c25a13255808b01233d
Parents: cdca961
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 21:30:26 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/e9cb3afc/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);
+        }
     }
 
     /**