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), "");
}