You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by pa...@apache.org on 2015/05/29 22:44:12 UTC

incubator-groovy git commit: minor refactor

Repository: incubator-groovy
Updated Branches:
  refs/heads/master 03d9c2673 -> d0703bcd9


minor refactor


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/d0703bcd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/d0703bcd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/d0703bcd

Branch: refs/heads/master
Commit: d0703bcd9b796006dbe6c85fade994ee137b9265
Parents: 03d9c26
Author: Paul King <pa...@asert.com.au>
Authored: Sat May 30 06:44:00 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Sat May 30 06:44:00 2015 +1000

----------------------------------------------------------------------
 gradle/pomconfigurer.gradle                     | 39 ++++++++++++++++++++
 .../codehaus/groovy/ast/tools/ClosureUtils.java | 29 +++++++++++++--
 .../groovy/runtime/StringGroovyMethods.java     | 39 +++++++++++++++-----
 3 files changed, 94 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/d0703bcd/gradle/pomconfigurer.gradle
----------------------------------------------------------------------
diff --git a/gradle/pomconfigurer.gradle b/gradle/pomconfigurer.gradle
index bff3bc6..ea9b1d6 100644
--- a/gradle/pomconfigurer.gradle
+++ b/gradle/pomconfigurer.gradle
@@ -97,6 +97,13 @@ project.ext.pomConfigureClosureWithoutTweaks = {
                 }
             }
             developer {
+                id 'alextkachman'
+                name 'Alex Tkachman'
+                roles {
+                    role 'Developer Emeritus'
+                }
+            }
+            developer {
                 id 'spullara'
                 name 'Sam Pullara'
                 email 'sam@sampullara.com'
@@ -272,6 +279,13 @@ project.ext.pomConfigureClosureWithoutTweaks = {
                 }
             }
             developer {
+                id 'timyates'
+                name 'Tim Yates'
+                roles {
+                    role 'Developer'
+                }
+            }
+            developer {
                 id 'aalmiray'
                 name 'Andres Almiray'
                 email 'aalmiray@users.sourceforge.net'
@@ -305,6 +319,13 @@ project.ext.pomConfigureClosureWithoutTweaks = {
                 }
             }
             developer {
+                id 'andresteingress'
+                name 'Andre Steingress'
+                roles {
+                    role 'Developer'
+                }
+            }
+            developer {
                 id 'hamletdrc'
                 name 'Hamlet D\'Arcy'
                 email 'hamletdrc@gmail.com'
@@ -425,6 +446,9 @@ project.ext.pomConfigureClosureWithoutTweaks = {
                 name 'Jim Jagielski'
             }
             contributor {
+                name 'Rodolfo Velasco'
+            }
+            contributor {
                 name 'John Hurst'
             }
             contributor {
@@ -487,6 +511,21 @@ project.ext.pomConfigureClosureWithoutTweaks = {
             contributor {
                 name 'David Lee'
             }
+            contributor {
+                name 'Sergei Egorov'
+            }
+            contributor {
+                name 'Hein Meling'
+            }
+            contributor {
+                name 'Michael Baehr'
+            }
+            contributor {
+                name 'Craig Andrews'
+            }
+            contributor {
+                name 'Peter Ledbrook'
+            }
         }
         mailingLists {
             mailingList {

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/d0703bcd/src/main/org/codehaus/groovy/ast/tools/ClosureUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/tools/ClosureUtils.java b/src/main/org/codehaus/groovy/ast/tools/ClosureUtils.java
index e037ef3..c13c31c 100644
--- a/src/main/org/codehaus/groovy/ast/tools/ClosureUtils.java
+++ b/src/main/org/codehaus/groovy/ast/tools/ClosureUtils.java
@@ -18,13 +18,11 @@
  */
 package org.codehaus.groovy.ast.tools;
 
+import groovy.lang.Closure;
 import org.codehaus.groovy.ast.expr.ClosureExpression;
 import org.codehaus.groovy.control.io.ReaderSource;
 /**
- * Handy methods when working with the Closure expressions.
- *
- * @author Hamlet D'Arcy
- * @author Sergei Egorov
+ * Handy methods when working with Closure AST data structures.
  */
 
 public class ClosureUtils {
@@ -67,4 +65,27 @@ public class ClosureUtils {
 
         return source;
     }
+
+    /**
+     * Does the Closure have a single char-like (char or Character) argument.
+     * @param c a Closure
+     * @return true if it has exactly one argument and the type is char or Character
+     */
+    public static boolean hasSingleCharacterArg(Closure c) {
+        if (c.getMaximumNumberOfParameters() != 1) return false;
+        String typeName = c.getParameterTypes()[0].getName();
+        return typeName.equals("char") || typeName.equals("java.lang.Character");
+    }
+
+    /**
+     * Does the Closure have a single String argument.
+     * @param c a Closure
+     * @return true if it has exactly one argument and the type is String
+     */
+    public static boolean hasSingleStringArg(Closure c) {
+        if (c.getMaximumNumberOfParameters() != 1) return false;
+        String typeName = c.getParameterTypes()[0].getName();
+        return typeName.equals("java.lang.String");
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/d0703bcd/src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java b/src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java
index e318503..4423faf 100644
--- a/src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java
+++ b/src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java
@@ -49,6 +49,7 @@ import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static org.codehaus.groovy.ast.tools.ClosureUtils.hasSingleCharacterArg;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForLine;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.each;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.join;
@@ -553,7 +554,7 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     @SuppressWarnings("unchecked")
     public static String dropWhile(CharSequence self, @ClosureParams(value=FromString.class, conflictResolutionStrategy=PickFirstResolver.class, options={"String", "Character"}) Closure condition) {
-        Iterator selfIter = hasCharacterArg(condition) ? new CharacterIterator(self) : new StringIterator(self);
+        Iterator selfIter = hasSingleCharacterArg(condition) ? new CharacterIterator(self) : new StringIterator(self);
         return join(DefaultGroovyMethods.dropWhile(selfIter, condition), "");
     }
 
@@ -572,6 +573,19 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
         return dropWhile(self.toString(), condition);
     }
 
+    private static final class CharacterIterable implements Iterable<Character> {
+        private final CharSequence delegate;
+
+        public CharacterIterable(CharSequence delegate) {
+            this.delegate = delegate;
+        }
+
+        @Override
+        public Iterator<Character> iterator() {
+            return new CharacterIterator(delegate);
+        }
+    }
+
     private static final class CharacterIterator implements Iterator<Character> {
         private final CharSequence delegate;
         private int length;
@@ -595,6 +609,19 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
         }
     }
 
+    private static final class StringIterable implements Iterable<String> {
+        private final CharSequence delegate;
+
+        public StringIterable(CharSequence delegate) {
+            this.delegate = delegate;
+        }
+
+        @Override
+        public Iterator<String> iterator() {
+            return new StringIterator(delegate);
+        }
+    }
+
     private static final class StringIterator implements Iterator<String> {
         private final CharSequence delegate;
         private int length;
@@ -700,7 +727,7 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
         StringBuilder sb = null; // lazy create for edge-case efficiency
         for (int i = 0, len = orig.length(); i < len; i++) {
             final char ch = orig.charAt(i);
-            final String replacement = transform.call(hasCharacterArg(transform) ? ch : Character.toString(ch));
+            final String replacement = transform.call(hasSingleCharacterArg(transform) ? ch : Character.toString(ch));
 
             if (replacement != null) {
                 // output differs from input; we write to our local buffer
@@ -718,12 +745,6 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
         return sb == null ? orig : sb.toString();
     }
 
-    private static boolean hasCharacterArg(Closure c) {
-        if (c.getMaximumNumberOfParameters() != 1) return false;
-        String typeName = c.getParameterTypes()[0].getName();
-        return typeName.equals("char") || typeName.equals("java.lang.Character");
-    }
-
     /**
      * Process each regex group matched substring of the given CharSequence. If the closure
      * parameter takes one argument, an array with all match groups is passed to it.
@@ -3230,7 +3251,7 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     @SuppressWarnings("unchecked")
     public static String takeWhile(CharSequence self, @ClosureParams(value=FromString.class, conflictResolutionStrategy=PickFirstResolver.class, options={"String", "Character"}) Closure condition) {
-        Iterator selfIter = hasCharacterArg(condition) ? new CharacterIterator(self) : new StringIterator(self);
+        Iterator selfIter = hasSingleCharacterArg(condition) ? new CharacterIterator(self) : new StringIterator(self);
         return join(DefaultGroovyMethods.takeWhile(selfIter, condition), "");
     }