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);
+        }
     }
 
     /**