You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/04/10 23:35:18 UTC

[groovy] branch GROOVY_3_0_X updated: Switch to faster String#indexOf/String#lastIndexOf methods taking a char parameter.

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new 0e0882e  Switch to faster String#indexOf/String#lastIndexOf methods taking a char parameter.
0e0882e is described below

commit 0e0882e838be55d79df69675ada0a61296bb8258
Author: Pascal Schumacher <pa...@gmx.net>
AuthorDate: Fri Apr 10 11:44:25 2020 +0200

    Switch to faster String#indexOf/String#lastIndexOf methods taking a char parameter.
    
    (cherry picked from commit 4a479bf48b4844487107bfb82cae5706fa778389)
---
 src/main/java/groovy/grape/GrabAnnotationTransformation.java   |  4 ++--
 src/main/java/groovy/lang/GroovyCodeSource.java                |  2 +-
 src/main/java/groovy/lang/GroovyShell.java                     |  2 +-
 src/main/java/groovy/lang/MetaClassImpl.java                   |  2 +-
 src/main/java/groovy/namespace/QName.java                      |  4 ++--
 src/main/java/org/apache/groovy/util/SystemUtil.java           |  2 +-
 .../groovy/control/customizers/SourceAwareCustomizer.java      |  2 +-
 .../org/codehaus/groovy/tools/javac/JavaStubGenerator.java     |  4 ++--
 .../org/codehaus/groovy/transform/trait/TraitComposer.java     |  2 +-
 src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java |  2 +-
 .../codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java  | 10 +++++-----
 subprojects/groovy-xml/src/main/java/groovy/xml/XmlParser.java |  2 +-
 .../src/main/java/groovy/xml/slurpersupport/GPathResult.java   |  4 ++--
 .../java/groovy/xml/slurpersupport/NamespaceAwareHashMap.java  |  2 +-
 14 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/main/java/groovy/grape/GrabAnnotationTransformation.java b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
index d30430a..c4689a8 100644
--- a/src/main/java/groovy/grape/GrabAnnotationTransformation.java
+++ b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
@@ -80,7 +80,7 @@ import static org.codehaus.groovy.transform.AbstractASTTransformation.getMemberS
 @GroovyASTTransformation(phase=CompilePhase.CONVERSION)
 public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implements ASTTransformation, CompilationUnitAware {
     private static final String GRAB_CLASS_NAME = Grab.class.getName();
-    private static final String GRAB_DOT_NAME = GRAB_CLASS_NAME.substring(GRAB_CLASS_NAME.lastIndexOf("."));
+    private static final String GRAB_DOT_NAME = GRAB_CLASS_NAME.substring(GRAB_CLASS_NAME.lastIndexOf('.'));
     private static final String GRAB_SHORT_NAME = GRAB_DOT_NAME.substring(1);
 
     private static final String GRABEXCLUDE_CLASS_NAME = GrabExclude.class.getName();
@@ -116,7 +116,7 @@ public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implem
     private static final String SYSTEM_PROPERTIES_SETTING = Grape.SYSTEM_PROPERTIES_SETTING;
 
     private static String dotName(String className) {
-        return className.substring(className.lastIndexOf("."));
+        return className.substring(className.lastIndexOf('.'));
     }
 
     private static String shortName(String className) {
diff --git a/src/main/java/groovy/lang/GroovyCodeSource.java b/src/main/java/groovy/lang/GroovyCodeSource.java
index 2cd6fa2..6d6bfd2 100644
--- a/src/main/java/groovy/lang/GroovyCodeSource.java
+++ b/src/main/java/groovy/lang/GroovyCodeSource.java
@@ -167,7 +167,7 @@ public class GroovyCodeSource {
             throw new RuntimeException("Could not construct a GroovyCodeSource from a null URL");
         }
         this.url = url;
-        // TODO: GROOVY-6561: GroovyMain got the name this way: script.substring(script.lastIndexOf("/") + 1)
+        // TODO: GROOVY-6561: GroovyMain got the name this way: script.substring(script.lastIndexOf('/') + 1)
         this.name = url.toExternalForm();
         this.codeSource = new CodeSource(url, (java.security.cert.Certificate[]) null);
         try {
diff --git a/src/main/java/groovy/lang/GroovyShell.java b/src/main/java/groovy/lang/GroovyShell.java
index f7d485b..bb47274 100644
--- a/src/main/java/groovy/lang/GroovyShell.java
+++ b/src/main/java/groovy/lang/GroovyShell.java
@@ -174,7 +174,7 @@ public class GroovyShell extends GroovyObjectSupport {
      */
     public Object run(final File scriptFile, String[] args) throws CompilationFailedException, IOException {
         String scriptName = scriptFile.getName();
-        int p = scriptName.lastIndexOf(".");
+        int p = scriptName.lastIndexOf('.');
         if (p++ >= 0) {
             if (scriptName.substring(p).equals("java")) {
                 throw new CompilationFailedException(0, null);
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index f3a149a..4ade193 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -563,7 +563,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             }
 
             private String[] decomposeMopName(final String mopName) {
-                int idx = mopName.indexOf("$");
+                int idx = mopName.indexOf('$');
                 if (idx > 0) {
                     int eidx = mopName.indexOf("$", idx + 1);
                     if (eidx > 0) {
diff --git a/src/main/java/groovy/namespace/QName.java b/src/main/java/groovy/namespace/QName.java
index 09126b8..e029fc5 100644
--- a/src/main/java/groovy/namespace/QName.java
+++ b/src/main/java/groovy/namespace/QName.java
@@ -178,7 +178,7 @@ public class QName implements Serializable {
         } else if (o instanceof String) {
             final String string = (String)o;
             if (string.length() == 0) return false;
-            int lastColonIndex = string.lastIndexOf(":");
+            int lastColonIndex = string.lastIndexOf(':');
             if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
             final String stringPrefix = string.substring(0,lastColonIndex);
             final String stringLocalPart = string.substring(lastColonIndex + 1);
@@ -219,7 +219,7 @@ public class QName implements Serializable {
             final String string = (String)o;
             if (string.length() == 0) return false;
             // try matching against 'prefix:localname'
-            int lastColonIndex = string.lastIndexOf(":");
+            int lastColonIndex = string.lastIndexOf(':');
             if (lastColonIndex < 0 && prefix.length() == 0) return string.equals(localPart);
             if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
             final String stringPrefix = string.substring(0,lastColonIndex);
diff --git a/src/main/java/org/apache/groovy/util/SystemUtil.java b/src/main/java/org/apache/groovy/util/SystemUtil.java
index 57cd91a..503928a 100644
--- a/src/main/java/org/apache/groovy/util/SystemUtil.java
+++ b/src/main/java/org/apache/groovy/util/SystemUtil.java
@@ -31,7 +31,7 @@ public class SystemUtil {
         if (nameValue == null) throw new IllegalArgumentException("argument should not be null");
 
         String name, value;
-        int i = nameValue.indexOf("=");
+        int i = nameValue.indexOf('=');
 
         if (i == -1) {
             name = nameValue;
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
index 9858a42..3712442 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
@@ -80,7 +80,7 @@ public class SourceAwareCustomizer extends DelegatingCustomizer {
     }
 
     public boolean accept(String fileName) {
-        int ext = fileName.lastIndexOf(".");
+        int ext = fileName.lastIndexOf('.');
         String baseName = ext<0?fileName:fileName.substring(0, ext);
         String extension = ext<0?"":fileName.substring(ext+1);
         return acceptExtension(extension) && acceptBaseName(baseName);
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 209fc67..fcf3948 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -309,7 +309,7 @@ public class JavaStubGenerator {
 
             String className = classNode.getNameWithoutPackage();
             if (classNode instanceof InnerClassNode)
-                className = className.substring(className.lastIndexOf("$") + 1);
+                className = className.substring(className.lastIndexOf('$') + 1);
             out.println(className);
             printGenericsBounds(out, classNode, true);
 
@@ -539,7 +539,7 @@ public class JavaStubGenerator {
         out.print("public "); // temporary hack
         String className = clazz.getNameWithoutPackage();
         if (clazz instanceof InnerClassNode)
-            className = className.substring(className.lastIndexOf("$") + 1);
+            className = className.substring(className.lastIndexOf('$') + 1);
         out.println(className);
 
         printParams(out, constructorNode);
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 506044d..ae74dc2 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -198,7 +198,7 @@ public abstract class TraitComposer {
             for (MethodNode methodNode : declaredMethods) {
                 String fieldName = methodNode.getName();
                 if (fieldName.endsWith(Traits.DIRECT_GETTER_SUFFIX) || fieldName.endsWith(Traits.DIRECT_SETTER_SUFFIX)) {
-                    int suffixIdx = fieldName.lastIndexOf("$");
+                    int suffixIdx = fieldName.lastIndexOf('$');
                     fieldName = fieldName.substring(0, suffixIdx);
                     String operation = methodNode.getName().substring(suffixIdx + 1);
                     boolean getter = "get".equals(operation);
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
index 12d7197..f952598 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
@@ -138,7 +138,7 @@ public class ClassFinder {
                     String packagePathStr = String.join("/", Arrays.copyOfRange(pathElems, prefixElemCnt + (!wfs && pathElems[0].isEmpty() ? 1 : 0), nameCount - 1));
 
                     if (recursive || packageName.equals(packagePathStr)) {
-                        Set<String> packageNameSet = result.computeIfAbsent(filename.substring(0, filename.lastIndexOf(".")), f -> new HashSet<>(2));
+                        Set<String> packageNameSet = result.computeIfAbsent(filename.substring(0, filename.lastIndexOf('.')), f -> new HashSet<>(2));
                         packageNameSet.add(packagePathStr);
                     }
 
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index a9c3201..ef29024 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -454,10 +454,10 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
         if (type.startsWith("? super ")) return "? super " + getDocUrl(type.substring(8), full, links, relativePath, rootDoc, classDoc);
 
         String label = null;
-        int lt = type.indexOf("<");
+        int lt = type.indexOf('<');
         if (lt != -1) {
             String outerType = type.substring(0, lt);
-            int gt = type.lastIndexOf(">");
+            int gt = type.lastIndexOf('>');
             if (gt != -1) {
                 if (gt > lt) {
                     String allTypeArgs = type.substring(lt + 1, gt);
@@ -581,7 +581,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
 //        if (name.equals("T") || name.equals("U") || name.equals("K") || name.equals("V") || name.equals("G")) {
 //            name = "java/lang/Object";
 //        }
-        int slashIndex = name.lastIndexOf("/");
+        int slashIndex = name.lastIndexOf('/');
         if (rootDoc != null) {
             GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(name);
             if (doc != null) return doc;
@@ -685,7 +685,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
     private GroovyClassDoc resolveInternalClassDocFromSamePackage(GroovyRootDoc rootDoc, String baseName) {
         if (isPrimitiveType(baseName)) return null;
         if (baseName.contains(".")) return null;
-        int lastSlash = fullPathName.lastIndexOf("/");
+        int lastSlash = fullPathName.lastIndexOf('/');
         if (lastSlash < 0) return null;
         String pkg = fullPathName.substring(0, lastSlash + 1);
         return ((SimpleGroovyRootDoc)rootDoc).classNamedExact(pkg + baseName);
@@ -928,7 +928,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
                     if ("see".equals(tagname) || "link".equals(tagname)) {
                         content = getDocUrl(content);
                     } else if ("param".equals(tagname)) {
-                        int index = content.indexOf(" ");
+                        int index = content.indexOf(' ');
                         if (index >= 0) {
                             content = "<code>" + content.substring(0, index) + "</code> - " + content.substring(index);
                         }
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlParser.java b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlParser.java
index 94a6e4c..3f72bbb 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlParser.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlParser.java
@@ -493,7 +493,7 @@ public class XmlParser implements ContentHandler {
             return name;
         }
         if (qName != null && qName.length() > 0 && namespaceAware) {
-            int index = qName.lastIndexOf(":");
+            int index = qName.lastIndexOf(':');
             if (index > 0) {
                 prefix = qName.substring(0, index);
             }
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/GPathResult.java b/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/GPathResult.java
index 633f656..d733797 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/GPathResult.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/GPathResult.java
@@ -123,14 +123,14 @@ public abstract class GPathResult extends GroovyObjectSupport implements Writabl
             return depthFirst();
         } else if (property.startsWith("@")) {
             if (property.contains(":") && !this.namespaceTagHints.isEmpty()) {
-                final int i = property.indexOf(":");
+                final int i = property.indexOf(':');
                 return new Attributes(this, "@" + property.substring(i + 1), property.substring(1, i), this.namespaceTagHints);
             } else {
                 return new Attributes(this, property, this.namespaceTagHints);
             }
         } else {
             if (property.contains(":") && !this.namespaceTagHints.isEmpty()) {
-                final int i = property.indexOf(":");
+                final int i = property.indexOf(':');
                 return new NodeChildren(this, property.substring(i + 1), property.substring(0, i), this.namespaceTagHints);
             } else {
                 return new NodeChildren(this, property, this.namespaceTagHints);
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/NamespaceAwareHashMap.java b/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/NamespaceAwareHashMap.java
index 4035e5c..dbe44de 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/NamespaceAwareHashMap.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/slurpersupport/NamespaceAwareHashMap.java
@@ -72,7 +72,7 @@ public class NamespaceAwareHashMap extends HashMap<String, String> {
         if (keyString.contains("{") || namespaceTagHints == null || namespaceTagHints.isEmpty() || !keyString.contains(":")) {
             return key;
         }
-        final int i = keyString.indexOf(":");
+        final int i = keyString.indexOf(':');
         return new QName(namespaceTagHints.get(keyString.substring(0, i)).toString(), keyString.substring(i + 1)).toString();
     }
 }