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 2019/11/03 15:42:16 UTC

[groovy] branch GROOVY_3_0_X updated (34296c9 -> 10096e6)

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

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


    from 34296c9  Refactor code
     new 4dc126f  Trivial refactoring: cleanup `CachedClass`
     new 80e9aa5  Minor refactoring: Anonymous type can be replaced with lambda expression
     new fb57610  Minor refactoring: Anonymous type can be replaced with method reference
     new 0a7e3f4  Minor refactoring: Lambda can be replaced with method reference
     new 3acf040  Trivial refactoring: Can be replaced with single 'Map.replaceAll' method call
     new c63e282  Trivial refactoring: Can be replaced with single 'Map.computeIfAbsent' method call
     new 7b0c8bb  Trivial refactoring: remove unused imports
     new dd8badc  Fix javadoc errors
     new 7a70cbd  Fix "java.lang.RuntimeException: No suitable ClassLoader found for grab" caused by refactoring
     new 1528aea  Minor refactoring: 'for' loop can be replaced with 'foreach'
     new 05431cf  Minor refactoring: 'while' loop can be replaced with 'foreach'
     new 8504c00  Trivial refactoring: Anonymous type has shorter lambda alternative
     new 15a7e9e  Trivial refactoring: `Collections.sort()` can be replaced with `List.sort()`
     new aa966b3  Trivial refactoring: Comparator combinator can be used
     new be4e98f  Trivial refactoring: replaced with empty array
     new aa81c0e  Trivial refactoring: Can be replaced with `size() != 1`
     new d339c88  Trivial refactoring: remove unnecessary check and cast
     new 10096e6  Trivial refactoring: avoid redundant operations on list

The 18 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/main/java/groovy/inspect/Inspector.java        |   3 +-
 .../java/groovy/lang/BenchmarkInterceptor.java     |   6 +-
 src/main/java/groovy/lang/ExpandoMetaClass.java    | 140 ++++++++++-----------
 src/main/java/groovy/lang/GroovyClassLoader.java   |  71 +++++------
 src/main/java/groovy/lang/GroovyCodeSource.java    |  28 ++---
 src/main/java/groovy/lang/GroovyShell.java         |  36 +-----
 src/main/java/groovy/lang/MetaClassImpl.java       |  34 ++---
 src/main/java/groovy/lang/ProxyMetaClass.java      |  24 +---
 .../java/groovy/util/FactoryBuilderSupport.java    |  15 +--
 src/main/java/groovy/util/GroovyScriptEngine.java  |  40 +++---
 src/main/java/groovy/util/NodeList.java            |   2 +-
 src/main/java/groovy/util/ObjectGraphBuilder.java  |  70 ++++-------
 src/main/java/groovy/util/ProxyGenerator.java      |  14 +--
 .../internal/util/ReevaluatingReference.java       |  13 +-
 .../util/concurrentlinkedhashmap/Weighers.java     |   8 +-
 src/main/java/org/codehaus/groovy/antlr/Main.java  |  31 ++---
 .../groovy/antlr/java/Java2GroovyProcessor.java    |   5 +-
 .../groovy/antlr/treewalker/CompositeVisitor.java  |  20 +--
 .../antlr/treewalker/FlatNodeListTraversal.java    |   8 +-
 .../java/org/codehaus/groovy/ast/CompileUnit.java  |   2 +-
 .../groovy/ast/decompiled/AsmDecompiler.java       |   5 +-
 .../groovy/ast/expr/ArgumentListExpression.java    |   3 +-
 .../codehaus/groovy/ast/tools/GenericsUtils.java   |   4 +-
 .../groovy/ast/tools/WideningCategories.java       |  32 +++--
 .../groovy/classgen/AsmClassGenerator.java         |  18 ++-
 .../codehaus/groovy/classgen/BytecodeSequence.java |   7 +-
 .../groovy/classgen/DummyClassGenerator.java       |   9 +-
 .../org/codehaus/groovy/classgen/ReturnAdder.java  |  11 +-
 .../groovy/classgen/VariableScopeVisitor.java      |   7 +-
 .../codehaus/groovy/classgen/asm/CompileStack.java |   9 +-
 .../groovy/classgen/asm/InvocationWriter.java      |  32 +++--
 .../codehaus/groovy/classgen/asm/MethodCaller.java |   3 +-
 .../groovy/classgen/asm/StatementWriter.java       |  20 ++-
 .../asm/sc/StaticCompilationMopWriter.java         |   7 +-
 .../groovy/control/CompilerConfiguration.java      |   2 +-
 .../codehaus/groovy/control/ErrorCollector.java    |  12 +-
 .../java/org/codehaus/groovy/control/Janitor.java  |   6 +-
 .../org/codehaus/groovy/control/LabelVerifier.java |   1 -
 .../codehaus/groovy/control/ProcessingUnit.java    |  10 +-
 .../org/codehaus/groovy/control/SourceUnit.java    |   6 +-
 .../codehaus/groovy/reflection/CachedClass.java    |  60 ++++-----
 .../groovy/reflection/CachedConstructor.java       |   3 +-
 .../codehaus/groovy/reflection/SunClassLoader.java |  12 +-
 .../reflection/stdclasses/CachedSAMClass.java      |   3 +-
 .../groovy/runtime/DefaultGroovyMethods.java       |  19 ++-
 .../groovy/runtime/EncodingGroovyMethods.java      |   4 +-
 .../groovy/runtime/ProcessGroovyMethods.java       |  52 ++++----
 .../groovy/runtime/ProxyGeneratorAdapter.java      |   6 +-
 .../groovy/runtime/ScriptBytecodeAdapter.java      |   4 +-
 .../groovy/runtime/SocketGroovyMethods.java        |   6 +-
 .../runtime/callsite/GroovySunClassLoader.java     |  16 ++-
 .../runtime/metaclass/ConcurrentReaderHashMap.java | 108 ++++++++--------
 .../runtime/metaclass/MetaClassRegistryImpl.java   |  62 ++++-----
 .../groovy/runtime/metaclass/MetaMethodIndex.java  |   4 +-
 .../runtime/powerassert/AssertionRenderer.java     |   6 +-
 .../java/org/codehaus/groovy/syntax/CSTNode.java   |  14 +--
 .../codehaus/groovy/tools/FileSystemCompiler.java  |   4 +-
 .../org/codehaus/groovy/tools/GroovyStarter.java   |   6 +-
 .../groovy/tools/javac/JavaStubGenerator.java      |   6 +-
 .../groovy/tools/shell/util/MessageSource.java     |  11 +-
 .../transform/AnnotationCollectorTransform.java    |   3 +-
 .../transform/MapConstructorASTTransformation.java |   1 -
 .../transform/SortableASTTransformation.java       |   9 +-
 .../transform/ToStringASTTransformation.java       |   9 +-
 .../TupleConstructorASTTransformation.java         |   9 +-
 .../stc/AbstractExtensionMethodCache.java          |   4 +-
 .../stc/GroovyTypeCheckingExtensionSupport.java    |   6 +-
 .../transform/stc/StaticTypeCheckingSupport.java   |   5 +-
 .../transform/stc/StaticTypeCheckingVisitor.java   |  12 +-
 .../groovy/util/AbstractConcurrentMap.java         |  12 +-
 .../groovy/util/AbstractConcurrentMapBase.java     | 100 +++++++--------
 .../groovy/util/ManagedConcurrentLinkedQueue.java  |   4 +-
 .../org/codehaus/groovy/util/ReferenceManager.java |  38 +++---
 .../codehaus/groovy/vmplugin/v5/JUnit4Utils.java   |   6 +-
 .../v7/IndyGuardsFiltersAndSignatures.java         |   5 +-
 .../codehaus/groovy/vmplugin/v7/IndyInterface.java |   8 +-
 .../org/codehaus/groovy/vmplugin/v7/Java7.java     |  18 +--
 .../org/codehaus/groovy/vmplugin/v9/Java9.java     |   6 +-
 78 files changed, 568 insertions(+), 867 deletions(-)


[groovy] 17/18: Trivial refactoring: remove unnecessary check and cast

Posted by su...@apache.org.
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

commit d339c8825a8763df90aebda0fe5c3885c1bec0df
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 23:11:52 2019 +0800

    Trivial refactoring: remove unnecessary check and cast
    
    (cherry picked from commit ed33b22fe20134569063bf03989d5516f9a51e34)
---
 .../java/org/codehaus/groovy/classgen/VariableScopeVisitor.java    | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index e6ffc6f..8d4a738 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -518,13 +518,12 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
     public void visitMethodCallExpression(MethodCallExpression call) {
         if (call.isImplicitThis() && call.getMethod() instanceof ConstantExpression) {
             ConstantExpression methodNameConstant = (ConstantExpression) call.getMethod();
-            Object value = methodNameConstant.getText();
+            String methodName = methodNameConstant.getText();
 
-            if (!(value instanceof String)) {
-                throw new GroovyBugError("tried to make a method call with a non-String constant method name.");
+            if (methodName == null) {
+                throw new GroovyBugError("method name is null");
             }
 
-            String methodName = (String) value;
             Variable v = checkVariableNameForDeclaration(methodName, call);
             if (v != null && !(v instanceof DynamicVariable)) {
                 checkVariableContextAccess(v, call);


[groovy] 03/18: Minor refactoring: Anonymous type can be replaced with method reference

Posted by su...@apache.org.
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

commit fb576101c613266163ae06f7f77b95964a9eb243
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:21:21 2019 +0800

    Minor refactoring: Anonymous type can be replaced with method reference
    
    (cherry picked from commit caff79f40a4d92e3b08cb3a02ebd1d7ffc8528a0)
---
 .../org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
index 781ebe1..a509c8b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
@@ -35,7 +35,7 @@ import java.util.LinkedList;
  */
 public class StaticCompilationMopWriter extends MopWriter {
 
-    public static final MopWriter.Factory FACTORY = controller -> new StaticCompilationMopWriter(controller);
+    public static final MopWriter.Factory FACTORY = StaticCompilationMopWriter::new;
 
     private final StaticTypesWriterController controller;
 


[groovy] 07/18: Trivial refactoring: remove unused imports

Posted by su...@apache.org.
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

commit 7b0c8bb3f804310e0d244c024903065f445a8b03
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:37:10 2019 +0800

    Trivial refactoring: remove unused imports
    
    (cherry picked from commit ebe9d61a42f3a5d4571c31a7b3d54a1cc6e1b060)
---
 src/main/java/org/codehaus/groovy/control/LabelVerifier.java             | 1 -
 .../java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java  | 1 -
 .../org/codehaus/groovy/transform/MapConstructorASTTransformation.java   | 1 -
 3 files changed, 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/LabelVerifier.java b/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
index 65bb6b5..0708db8 100644
--- a/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
+++ b/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
@@ -27,7 +27,6 @@ import org.codehaus.groovy.ast.stmt.Statement;
 import org.codehaus.groovy.ast.stmt.SwitchStatement;
 import org.codehaus.groovy.ast.stmt.WhileStatement;
 
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java b/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
index 5644bec..e911e6c 100644
--- a/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
+++ b/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
@@ -22,7 +22,6 @@ import org.codehaus.groovy.runtime.InvokerHelper;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
 /**
diff --git a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
index 8888960..5939c83 100644
--- a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
@@ -45,7 +45,6 @@ import org.codehaus.groovy.control.SourceUnit;
 
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;


[groovy] 09/18: Fix "java.lang.RuntimeException: No suitable ClassLoader found for grab" caused by refactoring

Posted by su...@apache.org.
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

commit 7a70cbde51c399819f07be9491d14737711e0e9e
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:22:23 2019 +0800

    Fix "java.lang.RuntimeException: No suitable ClassLoader found for grab" caused by refactoring
    
    (cherry picked from commit df2807701995a592763065d0e84fdfd507bd5c77)
---
 src/main/java/groovy/grape/Grape.java | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/src/main/java/groovy/grape/Grape.java b/src/main/java/groovy/grape/Grape.java
index dfe7a37..7ab4328 100644
--- a/src/main/java/groovy/grape/Grape.java
+++ b/src/main/java/groovy/grape/Grape.java
@@ -157,21 +157,24 @@ public class Grape {
 
     public static void grab(final Map<String, Object> args, final Map... dependencies) {
         if (enableGrapes) {
-            AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
-                GrapeEngine instance = getInstance();
-                if (instance != null) {
-                    if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
-                        args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
+            AccessController.doPrivileged(new PrivilegedAction<Void>() {
+                @Override
+                public Void run() {
+                    GrapeEngine instance = getInstance();
+                    if (instance != null) {
+                        if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
+                            args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
+                        }
+                        if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
+                            args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
+                        }
+                        if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) {
+                            args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2);
+                        }
+                        instance.grab(args, dependencies);
                     }
-                    if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
-                        args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
-                    }
-                    if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) {
-                        args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2);
-                    }
-                    instance.grab(args, dependencies);
+                    return null;
                 }
-                return null;
             });
         }
     }


[groovy] 04/18: Minor refactoring: Lambda can be replaced with method reference

Posted by su...@apache.org.
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

commit 0a7e3f47b183a6ca64377ab140f47066294f927a
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:29:25 2019 +0800

    Minor refactoring: Lambda can be replaced with method reference
    
    (cherry picked from commit d852871dc12cb72716f2cbb0d2a0e2160cc11aac)
---
 .../java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java | 3 +--
 .../org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java   | 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
index 9ab08c2..227eba4 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
@@ -37,7 +37,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.Map;
 
 public class CachedSAMClass extends CachedClass {
@@ -103,7 +102,7 @@ public class CachedSAMClass extends CachedClass {
 
     private static Method[] getDeclaredMethods(final Class c) {
         try {
-            Method[] methods = AccessController.doPrivileged((PrivilegedAction<Method[]>) () -> c.getDeclaredMethods());
+            Method[] methods = AccessController.doPrivileged((PrivilegedAction<Method[]>) c::getDeclaredMethods);
             if (methods!=null) return methods;
         } catch (java.security.AccessControlException ace) {
             // swallow and do as if no method is available
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index 84728cd..dd74327 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1191,7 +1191,7 @@ public abstract class StaticTypeCheckingSupport {
         return Arrays.stream(params).map(param -> {
             String name = param.getType().getUnresolvedName();
             Optional<GenericsType> value = genericsPlaceholderAndTypeMap.entrySet().stream()
-                .filter(e -> e.getKey().getName().equals(name)).findFirst().map(e -> e.getValue());
+                .filter(e -> e.getKey().getName().equals(name)).findFirst().map(Entry::getValue);
             ClassNode type = value.map(GenericsType::getType).orElseGet(() -> makeRawType(param.getType()));
 
             return new Parameter(type, param.getName());


[groovy] 02/18: Minor refactoring: Anonymous type can be replaced with lambda expression

Posted by su...@apache.org.
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

commit 80e9aa559c6643d16db22674e8f21eaf5cd6feb2
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:19:58 2019 +0800

    Minor refactoring: Anonymous type can be replaced with lambda expression
    
    (cherry picked from commit be7591e22c9605a9366129ef4c5a184264169922)
---
 src/main/java/groovy/grape/Grape.java              |  29 ++---
 src/main/java/groovy/lang/ExpandoMetaClass.java    | 135 ++++++++++-----------
 src/main/java/groovy/lang/GroovyClassLoader.java   |  71 +++++------
 src/main/java/groovy/lang/GroovyCodeSource.java    |  28 ++---
 src/main/java/groovy/lang/GroovyShell.java         |  36 +-----
 src/main/java/groovy/lang/ProxyMetaClass.java      |  24 +---
 .../java/groovy/util/FactoryBuilderSupport.java    |  12 +-
 src/main/java/groovy/util/GroovyScriptEngine.java  |  40 +++---
 src/main/java/groovy/util/ObjectGraphBuilder.java  |  70 ++++-------
 src/main/java/groovy/util/ProxyGenerator.java      |  14 +--
 .../internal/util/ReevaluatingReference.java       |  13 +-
 .../groovy/ast/tools/WideningCategories.java       |  32 +++--
 .../org/codehaus/groovy/classgen/ReturnAdder.java  |  11 +-
 .../groovy/classgen/asm/InvocationWriter.java      |  14 +--
 .../groovy/classgen/asm/StatementWriter.java       |  20 ++-
 .../asm/sc/StaticCompilationMopWriter.java         |   7 +-
 .../codehaus/groovy/control/ProcessingUnit.java    |  10 +-
 .../org/codehaus/groovy/control/SourceUnit.java    |   6 +-
 .../codehaus/groovy/reflection/SunClassLoader.java |  12 +-
 .../groovy/runtime/ProcessGroovyMethods.java       |  52 ++++----
 .../groovy/runtime/ProxyGeneratorAdapter.java      |   6 +-
 .../groovy/runtime/SocketGroovyMethods.java        |   6 +-
 .../runtime/callsite/GroovySunClassLoader.java     |  16 ++-
 .../runtime/metaclass/MetaClassRegistryImpl.java   |  34 +++---
 .../org/codehaus/groovy/tools/GroovyStarter.java   |   6 +-
 .../transform/SortableASTTransformation.java       |   6 +-
 .../transform/ToStringASTTransformation.java       |   6 +-
 .../TupleConstructorASTTransformation.java         |   6 +-
 .../codehaus/groovy/vmplugin/v7/IndyInterface.java |   8 +-
 .../org/codehaus/groovy/vmplugin/v7/Java7.java     |  18 +--
 30 files changed, 282 insertions(+), 466 deletions(-)

diff --git a/src/main/java/groovy/grape/Grape.java b/src/main/java/groovy/grape/Grape.java
index 7ab4328..dfe7a37 100644
--- a/src/main/java/groovy/grape/Grape.java
+++ b/src/main/java/groovy/grape/Grape.java
@@ -157,24 +157,21 @@ public class Grape {
 
     public static void grab(final Map<String, Object> args, final Map... dependencies) {
         if (enableGrapes) {
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                @Override
-                public Void run() {
-                    GrapeEngine instance = getInstance();
-                    if (instance != null) {
-                        if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
-                            args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
-                        }
-                        if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
-                            args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
-                        }
-                        if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) {
-                            args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2);
-                        }
-                        instance.grab(args, dependencies);
+            AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+                GrapeEngine instance = getInstance();
+                if (instance != null) {
+                    if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
+                        args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
                     }
-                    return null;
+                    if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
+                        args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
+                    }
+                    if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) {
+                        args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2);
+                    }
+                    instance.grab(args, dependencies);
                 }
+                return null;
             });
         }
     }
diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java b/src/main/java/groovy/lang/ExpandoMetaClass.java
index 578fad1..42abd56 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -846,27 +846,24 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
      * @param newValue The properties initial value
      */
     public void registerBeanProperty(final String property, final Object newValue) {
-        performOperationOnMetaClass(new Callable() {
-            public void call() {
-                Class type = newValue == null ? Object.class : newValue.getClass();
-
-                MetaBeanProperty mbp = newValue instanceof MetaBeanProperty ? (MetaBeanProperty) newValue : new ThreadManagedMetaBeanProperty(theClass, property, type, newValue);
+        performOperationOnMetaClass(() -> {
+            Class type = newValue == null ? Object.class : newValue.getClass();
 
-                final MetaMethod getter = mbp.getGetter();
-                final MethodKey getterKey = new DefaultCachedMethodKey(theClass, getter.getName(), CachedClass.EMPTY_ARRAY, false);
-                final MetaMethod setter = mbp.getSetter();
-                final MethodKey setterKey = new DefaultCachedMethodKey(theClass, setter.getName(), setter.getParameterTypes(), false);
-                addMetaMethod(getter);
-                addMetaMethod(setter);
+            MetaBeanProperty mbp = newValue instanceof MetaBeanProperty ? (MetaBeanProperty) newValue : new ThreadManagedMetaBeanProperty(theClass, property, type, newValue);
 
-                expandoMethods.put(setterKey, setter);
-                expandoMethods.put(getterKey, getter);
-                expandoProperties.put(mbp.getName(), mbp);
+            final MetaMethod getter = mbp.getGetter();
+            final MethodKey getterKey = new DefaultCachedMethodKey(theClass, getter.getName(), CachedClass.EMPTY_ARRAY, false);
+            final MetaMethod setter = mbp.getSetter();
+            final MethodKey setterKey = new DefaultCachedMethodKey(theClass, setter.getName(), setter.getParameterTypes(), false);
+            addMetaMethod(getter);
+            addMetaMethod(setter);
 
-                addMetaBeanProperty(mbp);
-                performRegistryCallbacks();
-            }
+            expandoMethods.put(setterKey, setter);
+            expandoMethods.put(getterKey, getter);
+            expandoProperties.put(mbp.getName(), mbp);
 
+            addMetaBeanProperty(mbp);
+            performRegistryCallbacks();
         });
     }
 
@@ -877,32 +874,29 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
      */
     public void registerInstanceMethod(final MetaMethod metaMethod) {
         final boolean inited = this.initCalled;
-        performOperationOnMetaClass(new Callable() {
-            public void call() {
-                String methodName = metaMethod.getName();
-                checkIfGroovyObjectMethod(metaMethod);
-                MethodKey key = new DefaultCachedMethodKey(theClass, methodName, metaMethod.getParameterTypes(), false);
+        performOperationOnMetaClass(() -> {
+            String methodName = metaMethod.getName();
+            checkIfGroovyObjectMethod(metaMethod);
+            MethodKey key = new DefaultCachedMethodKey(theClass, methodName, metaMethod.getParameterTypes(), false);
 
-                if (isInitialized()) {
-                    throw new RuntimeException("Already initialized, cannot add new method: " + metaMethod);
-                }
-                // we always adds meta methods to class itself
-                addMetaMethodToIndex(metaMethod, metaMethodIndex.getHeader(theClass));
+            if (isInitialized()) {
+                throw new RuntimeException("Already initialized, cannot add new method: " + metaMethod);
+            }
+            // we always adds meta methods to class itself
+            addMetaMethodToIndex(metaMethod, metaMethodIndex.getHeader(theClass));
 
-                dropMethodCache(methodName);
-                expandoMethods.put(key, metaMethod);
+            dropMethodCache(methodName);
+            expandoMethods.put(key, metaMethod);
 
-                if (inited && isGetter(methodName, metaMethod.getParameterTypes())) {
-                    String propertyName = getPropertyForGetter(methodName);
-                    registerBeanPropertyForMethod(metaMethod, propertyName, true, false);
+            if (inited && isGetter(methodName, metaMethod.getParameterTypes())) {
+                String propertyName = getPropertyForGetter(methodName);
+                registerBeanPropertyForMethod(metaMethod, propertyName, true, false);
 
-                } else if (inited && isSetter(methodName, metaMethod.getParameterTypes())) {
-                    String propertyName = getPropertyForSetter(methodName);
-                    registerBeanPropertyForMethod(metaMethod, propertyName, false, false);
-                }
-                performRegistryCallbacks();
+            } else if (inited && isSetter(methodName, metaMethod.getParameterTypes())) {
+                String propertyName = getPropertyForSetter(methodName);
+                registerBeanPropertyForMethod(metaMethod, propertyName, false, false);
             }
-
+            performRegistryCallbacks();
         });
     }
 
@@ -1002,49 +996,46 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
      * @param callable The callable Closure
      */
     protected void registerStaticMethod(final String name, final Closure callable, final Class[] paramTypes) {
-        performOperationOnMetaClass(new Callable() {
-            public void call() {
-                String methodName;
-                if (name.equals(METHOD_MISSING))
-                    methodName = STATIC_METHOD_MISSING;
-                else if (name.equals(PROPERTY_MISSING))
-                    methodName = STATIC_PROPERTY_MISSING;
-                else
-                    methodName = name;
+        performOperationOnMetaClass(() -> {
+            String methodName;
+            if (name.equals(METHOD_MISSING))
+                methodName = STATIC_METHOD_MISSING;
+            else if (name.equals(PROPERTY_MISSING))
+                methodName = STATIC_PROPERTY_MISSING;
+            else
+                methodName = name;
 
-                ClosureStaticMetaMethod metaMethod = null;
+            ClosureStaticMetaMethod metaMethod = null;
 
-                if (paramTypes != null) {
-                    metaMethod = new ClosureStaticMetaMethod(methodName, theClass, callable, paramTypes);
-                } else {
-                    metaMethod = new ClosureStaticMetaMethod(methodName, theClass, callable);
-                }
+            if (paramTypes != null) {
+                metaMethod = new ClosureStaticMetaMethod(methodName, theClass, callable, paramTypes);
+            } else {
+                metaMethod = new ClosureStaticMetaMethod(methodName, theClass, callable);
+            }
 
-                if (methodName.equals(INVOKE_METHOD_METHOD) && callable.getParameterTypes().length == 2) {
-                    invokeStaticMethodMethod = metaMethod;
-                } else {
-                    if (methodName.equals(METHOD_MISSING)) {
-                        methodName = STATIC_METHOD_MISSING;
-                    }
-                    MethodKey key = new DefaultCachedMethodKey(theClass, methodName, metaMethod.getParameterTypes(), false);
+            if (methodName.equals(INVOKE_METHOD_METHOD) && callable.getParameterTypes().length == 2) {
+                invokeStaticMethodMethod = metaMethod;
+            } else {
+                if (methodName.equals(METHOD_MISSING)) {
+                    methodName = STATIC_METHOD_MISSING;
+                }
+                MethodKey key = new DefaultCachedMethodKey(theClass, methodName, metaMethod.getParameterTypes(), false);
 
-                    addMetaMethod(metaMethod);
-                    dropStaticMethodCache(methodName);
+                addMetaMethod(metaMethod);
+                dropStaticMethodCache(methodName);
 //                    cacheStaticMethod(key,metaMethod);
 
-                    if (isGetter(methodName, metaMethod.getParameterTypes())) {
-                        String propertyName = getPropertyForGetter(methodName);
-                        registerBeanPropertyForMethod(metaMethod, propertyName, true, true);
+                if (isGetter(methodName, metaMethod.getParameterTypes())) {
+                    String propertyName = getPropertyForGetter(methodName);
+                    registerBeanPropertyForMethod(metaMethod, propertyName, true, true);
 
-                    } else if (isSetter(methodName, metaMethod.getParameterTypes())) {
-                        String propertyName = getPropertyForSetter(methodName);
-                        registerBeanPropertyForMethod(metaMethod, propertyName, false, true);
-                    }
-                    performRegistryCallbacks();
-                    expandoMethods.put(key, metaMethod);
+                } else if (isSetter(methodName, metaMethod.getParameterTypes())) {
+                    String propertyName = getPropertyForSetter(methodName);
+                    registerBeanPropertyForMethod(metaMethod, propertyName, false, true);
                 }
+                performRegistryCallbacks();
+                expandoMethods.put(key, metaMethod);
             }
-
         });
     }
 
diff --git a/src/main/java/groovy/lang/GroovyClassLoader.java b/src/main/java/groovy/lang/GroovyClassLoader.java
index 59741fb..afc52ff 100644
--- a/src/main/java/groovy/lang/GroovyClassLoader.java
+++ b/src/main/java/groovy/lang/GroovyClassLoader.java
@@ -325,12 +325,7 @@ public class GroovyClassLoader extends URLClassLoader {
 
         return sourceCache.getAndPut(
                 cacheKey,
-                new EvictableCache.ValueProvider<String, Class>() {
-                    @Override
-                    public Class provide(String key) {
-                        return doParseClass(codeSource);
-                    }
-                },
+                key -> doParseClass(codeSource),
                 shouldCacheSource
         );
     }
@@ -666,11 +661,7 @@ public class GroovyClassLoader extends URLClassLoader {
      * @return the ClassCollector
      */
     protected ClassCollector createCollector(CompilationUnit unit, SourceUnit su) {
-        InnerLoader loader = AccessController.doPrivileged(new PrivilegedAction<InnerLoader>() {
-            public InnerLoader run() {
-                return new InnerLoader(GroovyClassLoader.this);
-            }
-        });
+        InnerLoader loader = AccessController.doPrivileged((PrivilegedAction<InnerLoader>) () -> new InnerLoader(GroovyClassLoader.this));
         return new ClassCollector(loader, unit, su);
     }
 
@@ -1098,42 +1089,40 @@ public class GroovyClassLoader extends URLClassLoader {
      * @see #addURL(URL)
      */
     public void addClasspath(final String path) {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
 
-                URI newURI;
-                try {
-                    newURI = new URI(path);
-                    // check if we can create a URL from that URI
-                    newURI.toURL();
-                } catch (URISyntaxException | IllegalArgumentException | MalformedURLException e) {
-                    // the URI has a false format, so lets try it with files ...
-                    newURI=new File(path).toURI();
-                }
+            URI newURI;
+            try {
+                newURI = new URI(path);
+                // check if we can create a URL from that URI
+                newURI.toURL();
+            } catch (URISyntaxException | IllegalArgumentException | MalformedURLException e) {
+                // the URI has a false format, so lets try it with files ...
+                newURI=new File(path).toURI();
+            }
 
-                URL[] urls = getURLs();
-                for (URL url : urls) {
-                    // Do not use URL.equals.  It uses the network to resolve names and compares ip addresses!
-                    // That is a violation of RFC and just plain evil.
-                    // http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hashcode-make.html
-                    // http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#equals(java.lang.Object)
-                    // "Since hosts comparison requires name resolution, this operation is a blocking operation.
-                    // Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP."
-                    try {
-                        if (newURI.equals(url.toURI())) return null;
-                    } catch (URISyntaxException e) {
-                        // fail fast! if we got a malformed URI the Classloader has to tell it
-                        throw new RuntimeException( e );
-                    }
-                }
+            URL[] urls = getURLs();
+            for (URL url : urls) {
+                // Do not use URL.equals.  It uses the network to resolve names and compares ip addresses!
+                // That is a violation of RFC and just plain evil.
+                // http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hashcode-make.html
+                // http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#equals(java.lang.Object)
+                // "Since hosts comparison requires name resolution, this operation is a blocking operation.
+                // Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP."
                 try {
-                    addURL(newURI.toURL());
-                } catch (MalformedURLException e) {
-                    // fail fast! if we got a malformed URL the Classloader has to tell it
+                    if (newURI.equals(url.toURI())) return null;
+                } catch (URISyntaxException e) {
+                    // fail fast! if we got a malformed URI the Classloader has to tell it
                     throw new RuntimeException( e );
                 }
-                return null;
             }
+            try {
+                addURL(newURI.toURL());
+            } catch (MalformedURLException e) {
+                // fail fast! if we got a malformed URL the Classloader has to tell it
+                throw new RuntimeException( e );
+            }
+            return null;
         });
     }
 
diff --git a/src/main/java/groovy/lang/GroovyCodeSource.java b/src/main/java/groovy/lang/GroovyCodeSource.java
index 6acd292..2cd6fa2 100644
--- a/src/main/java/groovy/lang/GroovyCodeSource.java
+++ b/src/main/java/groovy/lang/GroovyCodeSource.java
@@ -123,22 +123,20 @@ public class GroovyCodeSource {
         //The calls below require access to user.dir - allow here since getName() and getCodeSource() are
         //package private and used only by the GroovyClassLoader.
         try {
-            Object[] info = AccessController.doPrivileged(new PrivilegedExceptionAction<Object[]>() {
-                public Object[] run() throws IOException {
-                    // retrieve the content of the file using the provided encoding
-                    if (encoding != null) {
-                        scriptText = ResourceGroovyMethods.getText(infile, encoding);
-                    } else {
-                        scriptText = ResourceGroovyMethods.getText(infile);
-                    }
-
-                    Object[] info = new Object[2];
-                    URL url = file.toURI().toURL();
-                    info[0] = url.toExternalForm();
-                    //toURI().toURL() will encode, but toURL() will not.
-                    info[1] = new CodeSource(url, (Certificate[]) null);
-                    return info;
+            Object[] info = AccessController.doPrivileged((PrivilegedExceptionAction<Object[]>) () -> {
+                // retrieve the content of the file using the provided encoding
+                if (encoding != null) {
+                    scriptText = ResourceGroovyMethods.getText(infile, encoding);
+                } else {
+                    scriptText = ResourceGroovyMethods.getText(infile);
                 }
+
+                Object[] info1 = new Object[2];
+                URL url = file.toURI().toURL();
+                info1[0] = url.toExternalForm();
+                //toURI().toURL() will encode, but toURL() will not.
+                info1[1] = new CodeSource(url, (Certificate[]) null);
+                return info1;
             });
 
             this.name = (String) info[0];
diff --git a/src/main/java/groovy/lang/GroovyShell.java b/src/main/java/groovy/lang/GroovyShell.java
index 6f32a3c..3255fa1 100644
--- a/src/main/java/groovy/lang/GroovyShell.java
+++ b/src/main/java/groovy/lang/GroovyShell.java
@@ -100,11 +100,7 @@ public class GroovyShell extends GroovyObjectSupport {
             && ((GroovyClassLoader) parentLoader).hasCompatibleConfiguration(config)) {
           this.loader = (GroovyClassLoader) parentLoader;
         } else {
-          this.loader = AccessController.doPrivileged(new PrivilegedAction<GroovyClassLoader>() {
-              public GroovyClassLoader run() {
-                  return new GroovyClassLoader(parentLoader,config);
-              }
-          });
+          this.loader = AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> new GroovyClassLoader(parentLoader,config));
         }
         this.context = binding;
         this.config = config;
@@ -212,11 +208,7 @@ public class GroovyShell extends GroovyObjectSupport {
         // if you are compiling the script because the JVM isn't executing the main method.
         Class scriptClass;
         try {
-            scriptClass = AccessController.doPrivileged(new PrivilegedExceptionAction<Class>() {
-                public Class run() throws CompilationFailedException, IOException {
-                    return loader.parseClass(scriptFile);
-                }
-            });
+            scriptClass = AccessController.doPrivileged((PrivilegedExceptionAction<Class>) () -> loader.parseClass(scriptFile));
         } catch (PrivilegedActionException pae) {
             Exception e = pae.getException();
             if (e instanceof CompilationFailedException) {
@@ -347,11 +339,7 @@ public class GroovyShell extends GroovyObjectSupport {
      * @param args       the command line arguments to pass in
      */
     public Object run(final String scriptText, final String fileName, String[] args) throws CompilationFailedException {
-        GroovyCodeSource gcs = AccessController.doPrivileged(new PrivilegedAction<GroovyCodeSource>() {
-            public GroovyCodeSource run() {
-                return new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE);
-            }
-        });
+        GroovyCodeSource gcs = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
         return run(gcs, args);
     }
 
@@ -415,11 +403,7 @@ public class GroovyShell extends GroovyObjectSupport {
      * @param args     the command line arguments to pass in
      */
     public Object run(final Reader in, final String fileName, String[] args) throws CompilationFailedException {
-        GroovyCodeSource gcs = AccessController.doPrivileged(new PrivilegedAction<GroovyCodeSource>() {
-                    public GroovyCodeSource run() {
-                        return new GroovyCodeSource(in, fileName, DEFAULT_CODE_BASE);
-                    }
-        });
+        GroovyCodeSource gcs = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new GroovyCodeSource(in, fileName, DEFAULT_CODE_BASE));
         Class scriptClass = parseClass(gcs);
         return runScriptOrMainOrTestOrRunnable(scriptClass, args);
     }
@@ -476,11 +460,7 @@ public class GroovyShell extends GroovyObjectSupport {
             sm.checkPermission(new GroovyCodeSourcePermission(codeBase));
         }
 
-        GroovyCodeSource gcs = AccessController.doPrivileged(new PrivilegedAction<GroovyCodeSource>() {
-            public GroovyCodeSource run() {
-                return new GroovyCodeSource(scriptText, fileName, codeBase);
-            }
-        });
+        GroovyCodeSource gcs = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new GroovyCodeSource(scriptText, fileName, codeBase));
 
         return evaluate(gcs);
     }
@@ -590,11 +570,7 @@ public class GroovyShell extends GroovyObjectSupport {
     }
 
     public Script parse(final String scriptText, final String fileName) throws CompilationFailedException {
-        GroovyCodeSource gcs = AccessController.doPrivileged(new PrivilegedAction<GroovyCodeSource>() {
-            public GroovyCodeSource run() {
-                return new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE);
-            }
-        });
+        GroovyCodeSource gcs = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
         return parse(gcs);
     }
 
diff --git a/src/main/java/groovy/lang/ProxyMetaClass.java b/src/main/java/groovy/lang/ProxyMetaClass.java
index 06c8d96..ed1d8dd 100644
--- a/src/main/java/groovy/lang/ProxyMetaClass.java
+++ b/src/main/java/groovy/lang/ProxyMetaClass.java
@@ -115,11 +115,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
      * See Interceptor for details.
      */
     public Object invokeMethod(final Object object, final String methodName, final Object[] arguments) {
-        return doCall(object, methodName, arguments, interceptor, new Callable() {
-            public Object call() {
-                return adaptee.invokeMethod(object, methodName, arguments);
-            }
-        });
+        return doCall(object, methodName, arguments, interceptor, () -> adaptee.invokeMethod(object, methodName, arguments));
     }
 
     /**
@@ -130,11 +126,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
      */
     @Override
     public Object invokeMethod(final Class sender, final Object object, final String methodName, final Object[] arguments, final boolean isCallToSuper, final boolean fromInsideClass) {
-        return doCall(object, methodName, arguments, interceptor, new Callable() {
-            public Object call() {
-                return adaptee.invokeMethod(sender, object, methodName, arguments, isCallToSuper, fromInsideClass);
-            }
-        });
+        return doCall(object, methodName, arguments, interceptor, () -> adaptee.invokeMethod(sender, object, methodName, arguments, isCallToSuper, fromInsideClass));
     }
 
     /**
@@ -144,11 +136,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
      * See Interceptor for details.
      */
     public Object invokeStaticMethod(final Object object, final String methodName, final Object[] arguments) {
-        return doCall(object, methodName, arguments, interceptor, new Callable() {
-            public Object call() {
-                return adaptee.invokeStaticMethod(object, methodName, arguments);
-            }
-        });
+        return doCall(object, methodName, arguments, interceptor, () -> adaptee.invokeStaticMethod(object, methodName, arguments));
     }
 
     /**
@@ -158,11 +146,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
      * See Interceptor for details.
      */
     public Object invokeConstructor(final Object[] arguments) {
-        return doCall(theClass, "ctor", arguments, interceptor, new Callable() {
-            public Object call() {
-                return adaptee.invokeConstructor(arguments);
-            }
-        });
+        return doCall(theClass, "ctor", arguments, interceptor, () -> adaptee.invokeConstructor(arguments));
     }
 
     /**
diff --git a/src/main/java/groovy/util/FactoryBuilderSupport.java b/src/main/java/groovy/util/FactoryBuilderSupport.java
index 7316433..aeffa68 100644
--- a/src/main/java/groovy/util/FactoryBuilderSupport.java
+++ b/src/main/java/groovy/util/FactoryBuilderSupport.java
@@ -71,13 +71,11 @@ public abstract class FactoryBuilderSupport extends Binding {
     public static final String CHILD_BUILDER = "_CHILD_BUILDER_";
     public static final String SCRIPT_CLASS_NAME = "_SCRIPT_CLASS_NAME_";
     private static final Logger LOG = Logger.getLogger(FactoryBuilderSupport.class.getName());
-    private static final Comparator<Method> METHOD_COMPARATOR = new Comparator<Method>() {
-        public int compare(final Method o1, final Method o2) {
-            int cmp = o1.getName().compareTo(o2.getName());
-            if (cmp != 0) return cmp;
-            cmp = o1.getParameterTypes().length - o2.getParameterTypes().length;
-            return cmp;
-        }
+    private static final Comparator<Method> METHOD_COMPARATOR = (o1, o2) -> {
+        int cmp = o1.getName().compareTo(o2.getName());
+        if (cmp != 0) return cmp;
+        cmp = o1.getParameterTypes().length - o2.getParameterTypes().length;
+        return cmp;
     };
 
     /**
diff --git a/src/main/java/groovy/util/GroovyScriptEngine.java b/src/main/java/groovy/util/GroovyScriptEngine.java
index eede5cb..fa813a6 100644
--- a/src/main/java/groovy/util/GroovyScriptEngine.java
+++ b/src/main/java/groovy/util/GroovyScriptEngine.java
@@ -61,11 +61,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * with dependent scripts.
  */
 public class GroovyScriptEngine implements ResourceConnector {
-    private static final ClassLoader CL_STUB = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-        public ClassLoader run() {
-            return new ClassLoader() {};
-        }
-    });
+    private static final ClassLoader CL_STUB = AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> new ClassLoader() {});
 
     private static final URL[] EMPTY_URL_ARRAY = new URL[0];
 
@@ -133,20 +129,18 @@ public class GroovyScriptEngine implements ResourceConnector {
 
         private void setResLoader() {
             final GroovyResourceLoader rl = getResourceLoader();
-            setResourceLoader(new GroovyResourceLoader() {
-                public URL loadGroovySource(String className) throws MalformedURLException {
-                    String filename;
-                    for (String extension : getConfig().getScriptExtensions()) {
-                        filename = className.replace('.', File.separatorChar) + "." + extension;
-                        try {
-                            URLConnection dependentScriptConn = rc.getResourceConnection(filename);
-                            return dependentScriptConn.getURL();
-                        } catch (ResourceException e) {
-                            //TODO: maybe do something here?
-                        }
+            setResourceLoader(className -> {
+                String filename;
+                for (String extension : getConfig().getScriptExtensions()) {
+                    filename = className.replace('.', File.separatorChar) + "." + extension;
+                    try {
+                        URLConnection dependentScriptConn = rc.getResourceConnection(filename);
+                        return dependentScriptConn.getURL();
+                    } catch (ResourceException e) {
+                        //TODO: maybe do something here?
                     }
-                    return rl.loadGroovySource(className);
                 }
+                return rl.loadGroovySource(className);
             });
         }
 
@@ -349,13 +343,11 @@ public class GroovyScriptEngine implements ResourceConnector {
      */
     private GroovyClassLoader initGroovyLoader() {
         GroovyClassLoader groovyClassLoader =
-                AccessController.doPrivileged(new PrivilegedAction<ScriptClassLoader>() {
-                    public ScriptClassLoader run() {
-                        if (parentLoader instanceof GroovyClassLoader) {
-                            return new ScriptClassLoader((GroovyClassLoader) parentLoader);
-                        } else {
-                            return new ScriptClassLoader(parentLoader, config);
-                        }
+                AccessController.doPrivileged((PrivilegedAction<ScriptClassLoader>) () -> {
+                    if (parentLoader instanceof GroovyClassLoader) {
+                        return new ScriptClassLoader((GroovyClassLoader) parentLoader);
+                    } else {
+                        return new ScriptClassLoader(parentLoader, config);
                     }
                 });
         for (URL root : roots) groovyClassLoader.addURL(root);
diff --git a/src/main/java/groovy/util/ObjectGraphBuilder.java b/src/main/java/groovy/util/ObjectGraphBuilder.java
index b6b6b48..5a10b26 100644
--- a/src/main/java/groovy/util/ObjectGraphBuilder.java
+++ b/src/main/java/groovy/util/ObjectGraphBuilder.java
@@ -152,13 +152,10 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
             this.childPropertySetter = (ChildPropertySetter) childPropertySetter;
         } else if (childPropertySetter instanceof Closure) {
             final ObjectGraphBuilder self = this;
-            this.childPropertySetter = new ChildPropertySetter() {
-                public void setChild(Object parent, Object child, String parentName,
-                                     String propertyName) {
-                    Closure cls = (Closure) childPropertySetter;
-                    cls.setDelegate(self);
-                    cls.call(parent, child, parentName, propertyName);
-                }
+            this.childPropertySetter = (parent, child, parentName, propertyName) -> {
+                Closure cls = (Closure) childPropertySetter;
+                cls.setDelegate(self);
+                cls.call(parent, child, parentName, propertyName);
             };
         } else {
             this.childPropertySetter = new DefaultChildPropertySetter();
@@ -181,19 +178,13 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
         if (classNameResolver instanceof ClassNameResolver) {
             this.classNameResolver = (ClassNameResolver) classNameResolver;
         } else if (classNameResolver instanceof String) {
-            this.classNameResolver = new ClassNameResolver() {
-                public String resolveClassname(String classname) {
-                    return makeClassName((String) classNameResolver, classname);
-                }
-            };
+            this.classNameResolver = classname -> makeClassName((String) classNameResolver, classname);
         } else if (classNameResolver instanceof Closure) {
             final ObjectGraphBuilder self = this;
-            this.classNameResolver = new ClassNameResolver() {
-                public String resolveClassname(String classname) {
-                    Closure cls = (Closure) classNameResolver;
-                    cls.setDelegate(self);
-                    return (String) cls.call(new Object[]{classname});
-                }
+            this.classNameResolver = classname -> {
+                Closure cls = (Closure) classNameResolver;
+                cls.setDelegate(self);
+                return (String) cls.call(new Object[]{classname});
             };
         } else if (classNameResolver instanceof Map) {
             Map classNameResolverOptions = (Map) classNameResolver;
@@ -229,19 +220,13 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
         if (identifierResolver instanceof IdentifierResolver) {
             this.identifierResolver = (IdentifierResolver) identifierResolver;
         } else if (identifierResolver instanceof String) {
-            this.identifierResolver = new IdentifierResolver() {
-                public String getIdentifierFor(String nodeName) {
-                    return (String) identifierResolver;
-                }
-            };
+            this.identifierResolver = nodeName -> (String) identifierResolver;
         } else if (identifierResolver instanceof Closure) {
             final ObjectGraphBuilder self = this;
-            this.identifierResolver = new IdentifierResolver() {
-                public String getIdentifierFor(String nodeName) {
-                    Closure cls = (Closure) identifierResolver;
-                    cls.setDelegate(self);
-                    return (String) cls.call(new Object[]{nodeName});
-                }
+            this.identifierResolver = nodeName -> {
+                Closure cls = (Closure) identifierResolver;
+                cls.setDelegate(self);
+                return (String) cls.call(new Object[]{nodeName});
             };
         } else {
             this.identifierResolver = new DefaultIdentifierResolver();
@@ -265,13 +250,10 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
             this.newInstanceResolver = (NewInstanceResolver) newInstanceResolver;
         } else if (newInstanceResolver instanceof Closure) {
             final ObjectGraphBuilder self = this;
-            this.newInstanceResolver = new NewInstanceResolver() {
-                public Object newInstance(Class klass, Map attributes)
-                        throws InstantiationException, IllegalAccessException {
-                    Closure cls = (Closure) newInstanceResolver;
-                    cls.setDelegate(self);
-                    return cls.call(klass, attributes);
-                }
+            this.newInstanceResolver = (klass, attributes) -> {
+                Closure cls = (Closure) newInstanceResolver;
+                cls.setDelegate(self);
+                return cls.call(klass, attributes);
             };
         } else {
             this.newInstanceResolver = new DefaultNewInstanceResolver();
@@ -287,19 +269,13 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
         if (referenceResolver instanceof ReferenceResolver) {
             this.referenceResolver = (ReferenceResolver) referenceResolver;
         } else if (referenceResolver instanceof String) {
-            this.referenceResolver = new ReferenceResolver() {
-                public String getReferenceFor(String nodeName) {
-                    return (String) referenceResolver;
-                }
-            };
+            this.referenceResolver = nodeName -> (String) referenceResolver;
         } else if (referenceResolver instanceof Closure) {
             final ObjectGraphBuilder self = this;
-            this.referenceResolver = new ReferenceResolver() {
-                public String getReferenceFor(String nodeName) {
-                    Closure cls = (Closure) referenceResolver;
-                    cls.setDelegate(self);
-                    return (String) cls.call(new Object[]{nodeName});
-                }
+            this.referenceResolver = nodeName -> {
+                Closure cls = (Closure) referenceResolver;
+                cls.setDelegate(self);
+                return (String) cls.call(new Object[]{nodeName});
             };
         } else {
             this.referenceResolver = new DefaultReferenceResolver();
diff --git a/src/main/java/groovy/util/ProxyGenerator.java b/src/main/java/groovy/util/ProxyGenerator.java
index 3fd5ff2..06d6a2a 100644
--- a/src/main/java/groovy/util/ProxyGenerator.java
+++ b/src/main/java/groovy/util/ProxyGenerator.java
@@ -247,14 +247,12 @@ public class ProxyGenerator {
     }
     
     private static final class CacheKey {
-        private static final Comparator<Class> INTERFACE_COMPARATOR = new Comparator<Class>() {
-            public int compare(final Class o1, final Class o2) {
-                // Traits order *must* be preserved
-                // See GROOVY-7285
-                if (Traits.isTrait(o1)) return -1;
-                if (Traits.isTrait(o2)) return 1;
-                return o1.getName().compareTo(o2.getName());
-            }
+        private static final Comparator<Class> INTERFACE_COMPARATOR = (o1, o2) -> {
+            // Traits order *must* be preserved
+            // See GROOVY-7285
+            if (Traits.isTrait(o1)) return -1;
+            if (Traits.isTrait(o2)) return 1;
+            return o1.getName().compareTo(o2.getName());
         };
         private final boolean emptyMethods;
         private final boolean useDelegate;
diff --git a/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java b/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
index feeeea8..255e97b 100644
--- a/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
+++ b/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
@@ -41,15 +41,10 @@ public class ReevaluatingReference<T> {
     static {
         try {
             //TODO Jochen: move the findSpecial to a central place together with others to easy security configuration
-            FALLBACK_HANDLE = AccessController.doPrivileged(new PrivilegedExceptionAction<MethodHandle>() {
-                @Override
-                public MethodHandle run() throws Exception {
-                    return  MethodHandles.lookup().findSpecial(
-                            ReevaluatingReference.class, "replacePayLoad",
-                            MethodType.methodType(Object.class),
-                            ReevaluatingReference.class);
-                }
-            });
+            FALLBACK_HANDLE = AccessController.doPrivileged((PrivilegedExceptionAction<MethodHandle>) () -> MethodHandles.lookup().findSpecial(
+                    ReevaluatingReference.class, "replacePayLoad",
+                    MethodType.methodType(Object.class),
+                    ReevaluatingReference.class));
         } catch (PrivilegedActionException e) {
             throw new GroovyBugError(e);
         }
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
index 374239c..85cdd76 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
@@ -89,18 +89,16 @@ public class WideningCategories {
      * since a concrete implementation should be used at compile time, we must ensure that interfaces are
      * always sorted. It is not important what sort is used, as long as the result is constant.
      */
-    private static final Comparator<ClassNode> INTERFACE_CLASSNODE_COMPARATOR = new Comparator<ClassNode>() {
-        public int compare(final ClassNode o1, final ClassNode o2) {
-            int interfaceCountForO1 = o1.getInterfaces().length;
-            int interfaceCountForO2 = o2.getInterfaces().length;
-            if (interfaceCountForO1 > interfaceCountForO2) return -1;
-            if (interfaceCountForO1 < interfaceCountForO2) return 1;
-            int methodCountForO1 = o1.getMethods().size();
-            int methodCountForO2 = o2.getMethods().size();
-            if (methodCountForO1 > methodCountForO2) return -1;
-            if (methodCountForO1 < methodCountForO2) return 1;
-            return o1.getName().compareTo(o2.getName());
-        }
+    private static final Comparator<ClassNode> INTERFACE_CLASSNODE_COMPARATOR = (o1, o2) -> {
+        int interfaceCountForO1 = o1.getInterfaces().length;
+        int interfaceCountForO2 = o2.getInterfaces().length;
+        if (interfaceCountForO1 > interfaceCountForO2) return -1;
+        if (interfaceCountForO1 < interfaceCountForO2) return 1;
+        int methodCountForO1 = o1.getMethods().size();
+        int methodCountForO2 = o2.getMethods().size();
+        if (methodCountForO1 > methodCountForO2) return -1;
+        if (methodCountForO1 < methodCountForO2) return 1;
+        return o1.getName().compareTo(o2.getName());
     };
 
     /**
@@ -592,12 +590,10 @@ public class WideningCategories {
      *
      */
     public static class LowestUpperBoundClassNode extends ClassNode {
-        private static final Comparator<ClassNode> CLASS_NODE_COMPARATOR = new Comparator<ClassNode>() {
-            public int compare(final ClassNode o1, final ClassNode o2) {
-                String n1 = o1 instanceof LowestUpperBoundClassNode?((LowestUpperBoundClassNode)o1).name:o1.getName();
-                String n2 = o2 instanceof LowestUpperBoundClassNode?((LowestUpperBoundClassNode)o2).name:o2.getName();
-                return n1.compareTo(n2);
-            }
+        private static final Comparator<ClassNode> CLASS_NODE_COMPARATOR = (o1, o2) -> {
+            String n1 = o1 instanceof LowestUpperBoundClassNode?((LowestUpperBoundClassNode)o1).name:o1.getName();
+            String n2 = o2 instanceof LowestUpperBoundClassNode?((LowestUpperBoundClassNode)o2).name:o2.getName();
+            return n1.compareTo(n2);
         };
         private final ClassNode compileTimeClassNode;
         private final String name;
diff --git a/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java b/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
index 22f3059..110cb99 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
@@ -46,9 +46,7 @@ import java.util.List;
  */
 public class ReturnAdder {
 
-    private static final ReturnStatementListener DEFAULT_LISTENER = new ReturnStatementListener() {
-        public void returnStatementAdded(final ReturnStatement returnStatement) {
-        }
+    private static final ReturnStatementListener DEFAULT_LISTENER = returnStatement -> {
     };
 
     /**
@@ -165,12 +163,7 @@ public class ReturnAdder {
         if (statement instanceof TryCatchStatement) {
             TryCatchStatement trys = (TryCatchStatement) statement;
             final boolean[] missesReturn = new boolean[1];
-            new ReturnAdder(new ReturnStatementListener() {
-                @Override
-                public void returnStatementAdded(ReturnStatement returnStatement) {
-                    missesReturn[0] = true;
-                }
-            }).addReturnsIfNeeded(trys.getFinallyStatement(), scope);
+            new ReturnAdder(returnStatement -> missesReturn[0] = true).addReturnsIfNeeded(trys.getFinallyStatement(), scope);
             boolean hasFinally = !(trys.getFinallyStatement() instanceof EmptyStatement);
 
             // if there is no missing return in the finally block and the block exists
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index 3287481..c4a40ad 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -718,14 +718,12 @@ public class InvocationWriter {
     private static List<ConstructorNode> sortConstructors(ConstructorCallExpression call, ClassNode callNode) {
         // sort in a new list to prevent side effects
         List<ConstructorNode> constructors = new ArrayList<ConstructorNode>(callNode.getDeclaredConstructors());
-        Comparator comp = new Comparator() {
-            public int compare(Object arg0, Object arg1) {
-                ConstructorNode c0 = (ConstructorNode) arg0;
-                ConstructorNode c1 = (ConstructorNode) arg1;
-                String descriptor0 = BytecodeHelper.getMethodDescriptor(ClassHelper.VOID_TYPE, c0.getParameters());
-                String descriptor1 = BytecodeHelper.getMethodDescriptor(ClassHelper.VOID_TYPE, c1.getParameters());
-                return descriptor0.compareTo(descriptor1);
-            }
+        Comparator comp = (arg0, arg1) -> {
+            ConstructorNode c0 = (ConstructorNode) arg0;
+            ConstructorNode c1 = (ConstructorNode) arg1;
+            String descriptor0 = BytecodeHelper.getMethodDescriptor(ClassHelper.VOID_TYPE, c0.getParameters());
+            String descriptor1 = BytecodeHelper.getMethodDescriptor(ClassHelper.VOID_TYPE, c1.getParameters());
+            return descriptor0.compareTo(descriptor1);
         };
         Collections.sort(constructors, comp);
         return constructors;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
index 3a1f712..ad37efb 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -437,13 +437,10 @@ public class StatementWriter {
 
     private BlockRecorder makeBlockRecorder(Statement finallyStatement) {
         final BlockRecorder block = new BlockRecorder();
-        block.excludedStatement = new Runnable() {
-            @Override
-            public void run() {
-                controller.getCompileStack().pushBlockRecorderVisit(block);
-                finallyStatement.visit(controller.getAcg());
-                controller.getCompileStack().popBlockRecorderVisit(block);
-            }
+        block.excludedStatement = () -> {
+            controller.getCompileStack().pushBlockRecorderVisit(block);
+            finallyStatement.visit(controller.getAcg());
+            controller.getCompileStack().popBlockRecorderVisit(block);
         };
         controller.getCompileStack().pushBlockRecorder(block);
         return block;
@@ -553,12 +550,9 @@ public class StatementWriter {
         // if there is only a break/continue.
         mv.visitInsn(NOP);
 
-        Runnable finallyPart = new Runnable() {
-            @Override
-            public void run() {
-                mv.visitVarInsn(ALOAD, index);
-                mv.visitInsn(MONITOREXIT);
-            }
+        Runnable finallyPart = () -> {
+            mv.visitVarInsn(ALOAD, index);
+            mv.visitInsn(MONITOREXIT);
         };
         BlockRecorder fb = new BlockRecorder(finallyPart);
         fb.startRange(synchronizedStart);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
index c30040d..781ebe1 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
@@ -35,12 +35,7 @@ import java.util.LinkedList;
  */
 public class StaticCompilationMopWriter extends MopWriter {
 
-    public static final MopWriter.Factory FACTORY = new MopWriter.Factory() {
-        @Override
-        public MopWriter create(final WriterController controller) {
-            return new StaticCompilationMopWriter(controller);
-        }
-    };
+    public static final MopWriter.Factory FACTORY = controller -> new StaticCompilationMopWriter(controller);
 
     private final StaticTypesWriterController controller;
 
diff --git a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
index a16c826..83146cf 100644
--- a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
@@ -98,12 +98,10 @@ public abstract class ProcessingUnit {
     public void setClassLoader(final GroovyClassLoader loader) {
         // ClassLoaders should only be created inside a doPrivileged block in case
         // this method is invoked by code that does not have security permissions.
-        this.classLoader = loader != null ? loader : AccessController.doPrivileged(new PrivilegedAction<GroovyClassLoader>() {
-            public GroovyClassLoader run() {
-                ClassLoader parent = Thread.currentThread().getContextClassLoader();
-                if (parent == null) parent = ProcessingUnit.class.getClassLoader();
-                return new GroovyClassLoader(parent, getConfiguration());
-            }
+        this.classLoader = loader != null ? loader : AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> {
+            ClassLoader parent = Thread.currentThread().getContextClassLoader();
+            if (parent == null) parent = ProcessingUnit.class.getClassLoader();
+            return new GroovyClassLoader(parent, getConfiguration());
         });
     }
 
diff --git a/src/main/java/org/codehaus/groovy/control/SourceUnit.java b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
index 5188611..561f42d 100644
--- a/src/main/java/org/codehaus/groovy/control/SourceUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
@@ -256,11 +256,7 @@ public class SourceUnit extends ProcessingUnit {
             getErrorCollector().addError(new SyntaxErrorMessage(e, this));
         }
 
-        String property = (String) AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                return System.getProperty("groovy.ast");
-            }
-        });
+        String property = (String) AccessController.doPrivileged((PrivilegedAction) () -> System.getProperty("groovy.ast"));
 
         if ("xml".equals(property)) {
             saveAsXML(name, ast);
diff --git a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
index 0a6a082..6914585 100644
--- a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
@@ -41,13 +41,11 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
     static {
         SunClassLoader res;
         try {
-            res = AccessController.doPrivileged(new PrivilegedAction<SunClassLoader>() {
-                public SunClassLoader run() {
-                    try {
-                        return new SunClassLoader();
-                    } catch (Throwable e) {
-                        return null;
-                    }
+            res = AccessController.doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
+                try {
+                    return new SunClassLoader();
+                } catch (Throwable e) {
+                    return null;
                 }
             });
         }
diff --git a/src/main/java/org/codehaus/groovy/runtime/ProcessGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/ProcessGroovyMethods.java
index 7348d3f..fc82dc9 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ProcessGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ProcessGroovyMethods.java
@@ -348,13 +348,11 @@ public class ProcessGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.5.2
      */
     public static void withWriter(final Process self, final Closure closure) {
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    IOGroovyMethods.withWriter(new BufferedOutputStream(getOut(self)), closure);
-                } catch (IOException e) {
-                    throw new GroovyRuntimeException("exception while reading process stream", e);
-                }
+        new Thread(() -> {
+            try {
+                IOGroovyMethods.withWriter(new BufferedOutputStream(getOut(self)), closure);
+            } catch (IOException e) {
+                throw new GroovyRuntimeException("exception while reading process stream", e);
             }
         }).start();
     }
@@ -370,13 +368,11 @@ public class ProcessGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.5.2
      */
     public static void withOutputStream(final Process self, final Closure closure) {
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    IOGroovyMethods.withStream(new BufferedOutputStream(getOut(self)), closure);
-                } catch (IOException e) {
-                    throw new GroovyRuntimeException("exception while reading process stream", e);
-                }
+        new Thread(() -> {
+            try {
+                IOGroovyMethods.withStream(new BufferedOutputStream(getOut(self)), closure);
+            } catch (IOException e) {
+                throw new GroovyRuntimeException("exception while reading process stream", e);
             }
         }).start();
     }
@@ -391,22 +387,20 @@ public class ProcessGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.5.2
      */
     public static Process pipeTo(final Process left, final Process right) throws IOException {
-        new Thread(new Runnable() {
-            public void run() {
-                InputStream in = new BufferedInputStream(getIn(left));
-                OutputStream out = new BufferedOutputStream(getOut(right));
-                byte[] buf = new byte[8192];
-                int next;
-                try {
-                    while ((next = in.read(buf)) != -1) {
-                        out.write(buf, 0, next);
-                    }
-                } catch (IOException e) {
-                    throw new GroovyRuntimeException("exception while reading process stream", e);
-                } finally {
-                    closeWithWarning(out);
-                    closeWithWarning(in);
+        new Thread(() -> {
+            InputStream in = new BufferedInputStream(getIn(left));
+            OutputStream out = new BufferedOutputStream(getOut(right));
+            byte[] buf = new byte[8192];
+            int next;
+            try {
+                while ((next = in.read(buf)) != -1) {
+                    out.write(buf, 0, next);
                 }
+            } catch (IOException e) {
+                throw new GroovyRuntimeException("exception while reading process stream", e);
+            } finally {
+                closeWithWarning(out);
+                closeWithWarning(in);
             }
         }).start();
         return right;
diff --git a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
index 8f688cb..23c4017 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
@@ -252,11 +252,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
     }
 
     private static InnerLoader createInnerLoader(final ClassLoader parent, final Class[] interfaces) {
-        return AccessController.doPrivileged(new PrivilegedAction<InnerLoader>() {
-            public InnerLoader run() {
-                return new InnerLoader(parent, interfaces);
-            }
-        });
+        return AccessController.doPrivileged((PrivilegedAction<InnerLoader>) () -> new InnerLoader(parent, interfaces));
     }
 
     private InnerLoader findClassLoader(Class clazz, Class[] interfaces) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/SocketGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/SocketGroovyMethods.java
index ded99e5..38a9053 100644
--- a/src/main/java/org/codehaus/groovy/runtime/SocketGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/SocketGroovyMethods.java
@@ -178,11 +178,7 @@ public class SocketGroovyMethods extends DefaultGroovyMethodsSupport {
                                 @ClosureParams(value=SimpleType.class, options="java.net.Socket") final Closure closure) throws IOException {
         final Socket socket = serverSocket.accept();
         if (runInANewThread) {
-            new Thread(new Runnable() {
-                public void run() {
-                    invokeClosureWithSocket(socket, closure);
-                }
-            }).start();
+            new Thread(() -> invokeClosureWithSocket(socket, closure)).start();
         } else {
             invokeClosureWithSocket(socket, closure);
         }
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
index 71fd21e..1462825 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
@@ -33,17 +33,15 @@ public class GroovySunClassLoader extends SunClassLoader {
     public static final SunClassLoader sunVM;
 
     static {
-            sunVM = AccessController.doPrivileged(new PrivilegedAction<SunClassLoader>() {
-                public SunClassLoader run() {
-                    try {
-                        if (SunClassLoader.sunVM != null) {
-                            return new GroovySunClassLoader();
-                        }
+            sunVM = AccessController.doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
+                try {
+                    if (SunClassLoader.sunVM != null) {
+                        return new GroovySunClassLoader();
                     }
-                    catch (Throwable t) {//
-                    }
-                    return null;
                 }
+                catch (Throwable t) {//
+                }
+                return null;
             });
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
index 5495b9a..ec9fe1b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
@@ -135,25 +135,23 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
         ClassInfo.getClassInfo(ExpandoMetaClass.class).setStrongMetaClass(emcMetaClass);
 
 
-        addNonRemovableMetaClassRegistryChangeEventListener(new MetaClassRegistryChangeEventListener(){
-            public void updateConstantMetaClass(MetaClassRegistryChangeEvent cmcu) {
-                // The calls to DefaultMetaClassInfo.setPrimitiveMeta and sdyn.setBoolean need to be
-                // ordered. Even though metaClassInfo is thread-safe, it is included in the block
-                // so the meta classes are added to the queue in the same order.
-                synchronized (metaClassInfo) {
-                   metaClassInfo.add(cmcu.getNewMetaClass());
-                   DefaultMetaClassInfo.getNewConstantMetaClassVersioning();
-                   Class c = cmcu.getClassToUpdate();
-                   DefaultMetaClassInfo.setPrimitiveMeta(c, cmcu.getNewMetaClass()==null);
-                   Field sdyn;
-                   try {
-                       sdyn = c.getDeclaredField(Verifier.STATIC_METACLASS_BOOL);
-                       sdyn.setBoolean(null, cmcu.getNewMetaClass()!=null);
-                   } catch (Throwable e) {
-                       //DO NOTHING
-                   }
+        addNonRemovableMetaClassRegistryChangeEventListener(cmcu -> {
+            // The calls to DefaultMetaClassInfo.setPrimitiveMeta and sdyn.setBoolean need to be
+            // ordered. Even though metaClassInfo is thread-safe, it is included in the block
+            // so the meta classes are added to the queue in the same order.
+            synchronized (metaClassInfo) {
+               metaClassInfo.add(cmcu.getNewMetaClass());
+               DefaultMetaClassInfo.getNewConstantMetaClassVersioning();
+               Class c = cmcu.getClassToUpdate();
+               DefaultMetaClassInfo.setPrimitiveMeta(c, cmcu.getNewMetaClass()==null);
+               Field sdyn;
+               try {
+                   sdyn = c.getDeclaredField(Verifier.STATIC_METACLASS_BOOL);
+                   sdyn.setBoolean(null, cmcu.getNewMetaClass()!=null);
+               } catch (Throwable e) {
+                   //DO NOTHING
+               }
 
-                }
             }
         });
    }
diff --git a/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java b/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
index 08f8f1c..c745510 100644
--- a/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
+++ b/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
@@ -94,11 +94,7 @@ public class GroovyStarter {
             }
         }
         // create loader and execute main class
-        ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction<RootLoader>() {
-            public RootLoader run() {
-                return new RootLoader(lc);
-            }
-        });
+        ClassLoader loader = AccessController.doPrivileged((PrivilegedAction<RootLoader>) () -> new RootLoader(lc));
         Method m=null;
         try {
             Class c = loader.loadClass(lc.getMainClass());
diff --git a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
index e45772c..7acd487 100644
--- a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
@@ -236,11 +236,7 @@ public class SortableASTTransformation extends AbstractASTTransformation {
             checkComparable(pNode);
         }
         if (includes != null) {
-            Comparator<PropertyNode> includeComparator = new Comparator<PropertyNode>() {
-                public int compare(PropertyNode o1, PropertyNode o2) {
-                    return Integer.compare(includes.indexOf(o1.getName()), includes.indexOf(o2.getName()));
-                }
-            };
+            Comparator<PropertyNode> includeComparator = (o1, o2) -> Integer.compare(includes.indexOf(o1.getName()), includes.indexOf(o2.getName()));
             Collections.sort(properties, includeComparator);
         }
         return properties;
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index eff7aa6..7de6e13 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -218,11 +218,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         }
 
         if (includes != null) {
-            Comparator<ToStringElement> includeComparator = new Comparator<ToStringElement>() {
-                public int compare(ToStringElement tse1, ToStringElement tse2) {
-                    return Integer.compare(includes.indexOf(tse1.name), includes.indexOf(tse2.name));
-                }
-            };
+            Comparator<ToStringElement> includeComparator = (tse1, tse2) -> Integer.compare(includes.indexOf(tse1.name), includes.indexOf(tse2.name));
             Collections.sort(elements, includeComparator);
         }
 
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 65cd26d..def9095 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -248,11 +248,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
         }
 
         if (includes != null) {
-            Comparator<Parameter> includeComparator = new Comparator<Parameter>() {
-                public int compare(Parameter p1, Parameter p2) {
-                    return Integer.compare(includes.indexOf(p1.getName()), includes.indexOf(p2.getName()));
-                }
-            };
+            Comparator<Parameter> includeComparator = (p1, p2) -> Integer.compare(includes.indexOf(p1.getName()), includes.indexOf(p2.getName()));
             Collections.sort(params, includeComparator);
         }
 
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyInterface.java
index 6057476..3cbfad3 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyInterface.java
@@ -19,8 +19,6 @@
 package org.codehaus.groovy.vmplugin.v7;
 
 import groovy.lang.GroovySystem;
-import groovy.lang.MetaClassRegistryChangeEvent;
-import groovy.lang.MetaClassRegistryChangeEventListener;
 import org.codehaus.groovy.GroovyBugError;
 
 import java.lang.invoke.CallSite;
@@ -104,11 +102,7 @@ public class IndyInterface {
 
         protected static SwitchPoint switchPoint = new SwitchPoint();
         static {
-            GroovySystem.getMetaClassRegistry().addMetaClassRegistryChangeEventListener(new MetaClassRegistryChangeEventListener() {
-                public void updateConstantMetaClass(MetaClassRegistryChangeEvent cmcu) {
-                	invalidateSwitchPoints();
-                }
-            });
+            GroovySystem.getMetaClassRegistry().addMetaClassRegistryChangeEventListener(cmcu -> invalidateSwitchPoints());
         }
 
         /**
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v7/Java7.java b/src/main/java/org/codehaus/groovy/vmplugin/v7/Java7.java
index 071e71e..bc93bbd 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v7/Java7.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v7/Java7.java
@@ -47,12 +47,9 @@ public class Java7 extends Java6 {
             try {
                 if (!con.isAccessible()) {
                     final Constructor tmp = con;
-                    AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                        @Override
-                        public Object run() {
-                            ReflectionUtils.trySetAccessible(tmp);
-                            return null;
-                        }
+                    AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+                        ReflectionUtils.trySetAccessible(tmp);
+                        return null;
                     });
                 }
             } catch (SecurityException se) {
@@ -86,12 +83,9 @@ public class Java7 extends Java6 {
             return super.getInvokeSpecialHandle(method, receiver);
         }
         if (!method.isAccessible()) {
-            AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                @Override
-                public Object run() {
-                    ReflectionUtils.trySetAccessible(method);
-                    return null;
-                }
+            AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+                ReflectionUtils.trySetAccessible(method);
+                return null;
             });
         }
         Class declaringClass = method.getDeclaringClass();


[groovy] 14/18: Trivial refactoring: Comparator combinator can be used

Posted by su...@apache.org.
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

commit aa966b3faf0bc62ad0d3ce649455a445b26e92b5
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:57:06 2019 +0800

    Trivial refactoring: Comparator combinator can be used
    
    (cherry picked from commit 5143bb7f8aa9b2ddd35b20624f0e7e441b35ed95)
---
 src/main/java/groovy/util/FactoryBuilderSupport.java               | 7 +------
 .../org/codehaus/groovy/transform/SortableASTTransformation.java   | 2 +-
 .../org/codehaus/groovy/transform/ToStringASTTransformation.java   | 2 +-
 .../groovy/transform/TupleConstructorASTTransformation.java        | 2 +-
 4 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/main/java/groovy/util/FactoryBuilderSupport.java b/src/main/java/groovy/util/FactoryBuilderSupport.java
index be85429..7c9642f 100644
--- a/src/main/java/groovy/util/FactoryBuilderSupport.java
+++ b/src/main/java/groovy/util/FactoryBuilderSupport.java
@@ -71,12 +71,7 @@ public abstract class FactoryBuilderSupport extends Binding {
     public static final String CHILD_BUILDER = "_CHILD_BUILDER_";
     public static final String SCRIPT_CLASS_NAME = "_SCRIPT_CLASS_NAME_";
     private static final Logger LOG = Logger.getLogger(FactoryBuilderSupport.class.getName());
-    private static final Comparator<Method> METHOD_COMPARATOR = (o1, o2) -> {
-        int cmp = o1.getName().compareTo(o2.getName());
-        if (cmp != 0) return cmp;
-        cmp = o1.getParameterTypes().length - o2.getParameterTypes().length;
-        return cmp;
-    };
+    private static final Comparator<Method> METHOD_COMPARATOR = Comparator.comparing(Method::getName).thenComparingInt(o -> o.getParameterTypes().length);
 
     /**
      * Throws an exception if value is null.
diff --git a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
index 1f8cd4d..c12ff24 100644
--- a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
@@ -235,7 +235,7 @@ public class SortableASTTransformation extends AbstractASTTransformation {
             checkComparable(pNode);
         }
         if (includes != null) {
-            Comparator<PropertyNode> includeComparator = (o1, o2) -> Integer.compare(includes.indexOf(o1.getName()), includes.indexOf(o2.getName()));
+            Comparator<PropertyNode> includeComparator = Comparator.comparingInt(o -> includes.indexOf(o.getName()));
             properties.sort(includeComparator);
         }
         return properties;
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index a8acd42..80871a4 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -217,7 +217,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         }
 
         if (includes != null) {
-            Comparator<ToStringElement> includeComparator = (tse1, tse2) -> Integer.compare(includes.indexOf(tse1.name), includes.indexOf(tse2.name));
+            Comparator<ToStringElement> includeComparator = Comparator.comparingInt(tse -> includes.indexOf(tse.name));
             elements.sort(includeComparator);
         }
 
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index df4be58..4c97c67 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -247,7 +247,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
         }
 
         if (includes != null) {
-            Comparator<Parameter> includeComparator = (p1, p2) -> Integer.compare(includes.indexOf(p1.getName()), includes.indexOf(p2.getName()));
+            Comparator<Parameter> includeComparator = Comparator.comparingInt(p -> includes.indexOf(p.getName()));
             params.sort(includeComparator);
         }
 


[groovy] 05/18: Trivial refactoring: Can be replaced with single 'Map.replaceAll' method call

Posted by su...@apache.org.
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

commit 3acf0401ad64915d9f9730b2aa4f4d8ad12cce9c
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:32:06 2019 +0800

    Trivial refactoring: Can be replaced with single 'Map.replaceAll' method call
    
    (cherry picked from commit 746c05e151764413b180087fc6a4db593c0685c8)
---
 .../codehaus/groovy/transform/stc/AbstractExtensionMethodCache.java   | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/stc/AbstractExtensionMethodCache.java b/src/main/java/org/codehaus/groovy/transform/stc/AbstractExtensionMethodCache.java
index bfb5c04..d65d9d4 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/AbstractExtensionMethodCache.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/AbstractExtensionMethodCache.java
@@ -100,9 +100,7 @@ public abstract class AbstractExtensionMethodCache {
     }
 
     private Map<String, List<MethodNode>> makeMethodsUnmodifiable(Map<String, List<MethodNode>> methods) {
-        for (Map.Entry<String, List<MethodNode>> entry : methods.entrySet()) {
-            methods.put(entry.getKey(), Collections.unmodifiableList(entry.getValue()));
-        }
+        methods.replaceAll((k, v) -> Collections.unmodifiableList(v));
 
         return Collections.unmodifiableMap(methods);
     }


[groovy] 08/18: Fix javadoc errors

Posted by su...@apache.org.
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

commit dd8badc1af2916aec705a1b47b5f396c87d1db82
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:06:55 2019 +0800

    Fix javadoc errors
    
    (cherry picked from commit 2818b8e37a42353f3a82636b57dfbd886eff72b2)
---
 src/main/java/org/codehaus/groovy/ast/CompileUnit.java              | 2 +-
 src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
index 4344b46..9ed2172 100644
--- a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
+++ b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
@@ -224,7 +224,7 @@ public class CompileUnit implements NodeMetaDataHandler {
     /**
      * Represents a resolved type as a placeholder.
      *
-     * @see GROOVY-7812
+     * @see <a href="https://issues.apache.org/jira/browse/GROOVY-7812">GROOVY-7812</a>
      */
     @Internal
     public static class ConstructedOuterNestedClassNode extends ClassNode {
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 3811036..04f6b5a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -6209,7 +6209,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      *
      * @param self The array of values to add together
      * @return The sum of all of the items
-     * @see #sum(java.util.Iterable)
+     * @see #sum(java.util.Iterator)
      * @since 1.7.1
      */
     public static Object sum(Object[] self) {


[groovy] 13/18: Trivial refactoring: `Collections.sort()` can be replaced with `List.sort()`

Posted by su...@apache.org.
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

commit 15a7e9ef72e4a3eef0c7bdc2ad4a097236a2c2f8
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:54:42 2019 +0800

    Trivial refactoring: `Collections.sort()` can be replaced with `List.sort()`
    
    (cherry picked from commit ea12ea4a039d51160ad61b52f9d3a477edd4dcd7)
---
 src/main/java/groovy/inspect/Inspector.java                    |  3 +--
 src/main/java/groovy/lang/MetaClassImpl.java                   |  6 +++---
 .../org/codehaus/groovy/classgen/asm/InvocationWriter.java     |  3 +--
 .../java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java | 10 +++++-----
 .../codehaus/groovy/runtime/powerassert/AssertionRenderer.java |  5 +----
 .../codehaus/groovy/transform/SortableASTTransformation.java   |  3 +--
 .../codehaus/groovy/transform/ToStringASTTransformation.java   |  3 +--
 .../groovy/transform/TupleConstructorASTTransformation.java    |  3 +--
 8 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/src/main/java/groovy/inspect/Inspector.java b/src/main/java/groovy/inspect/Inspector.java
index caf5cd3..12fce8b 100644
--- a/src/main/java/groovy/inspect/Inspector.java
+++ b/src/main/java/groovy/inspect/Inspector.java
@@ -32,7 +32,6 @@ import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
@@ -306,7 +305,7 @@ public class Inspector {
     }
 
     public static Collection sort(List<Object> memberInfo) {
-        Collections.sort(memberInfo, new MemberComparator());
+        memberInfo.sort(new MemberComparator());
         return memberInfo;
     }
 
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 94cb823..93573d2 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -1632,7 +1632,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             String descriptor1 = BytecodeHelper.getMethodDescriptor(Void.TYPE, c1.getNativeParameterTypes());
             return descriptor0.compareTo(descriptor1);
         };
-        Collections.sort(l, comp);
+        l.sort(comp);
         int found = -1;
         for (int i = 0; i < l.size(); i++) {
             if (l.get(i) != constructor) continue;
@@ -2347,7 +2347,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             // sort interfaces so that we may ensure a deterministic behaviour in case of
             // ambiguous fields (class implementing two interfaces using the same field)
             if (superInterfaces.size() > 1) {
-                Collections.sort(superInterfaces, CACHED_CLASS_NAME_COMPARATOR);
+                superInterfaces.sort(CACHED_CLASS_NAME_COMPARATOR);
             }
 
             SingleKeyHashMap iPropertyIndex = classPropertyIndex.getNotNull(theCachedClass);
@@ -2368,7 +2368,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             // sort interfaces so that we may ensure a deterministic behaviour in case of
             // ambiguous fields (class implementing two interfaces using the same field)
             if (interfaces.size() > 1) {
-                Collections.sort(interfaces, CACHED_CLASS_NAME_COMPARATOR);
+                interfaces.sort(CACHED_CLASS_NAME_COMPARATOR);
             }
 
             // if this an Array, then add the special read-only "length" property
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index 472f70a..123f38b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -50,7 +50,6 @@ import org.objectweb.asm.MethodVisitor;
 
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -725,7 +724,7 @@ public class InvocationWriter {
             String descriptor1 = BytecodeHelper.getMethodDescriptor(ClassHelper.VOID_TYPE, c1.getParameters());
             return descriptor0.compareTo(descriptor1);
         };
-        Collections.sort(constructors, comp);
+        constructors.sort(comp);
         return constructors;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 04f6b5a..d5d0d44 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -9219,7 +9219,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static <T> List<T> sort(Iterable<T> self, boolean mutate) {
         List<T> answer = mutate ? asList(self) : toList(self);
-        Collections.sort(answer, new NumberAwareComparator<T>());
+        answer.sort(new NumberAwareComparator<T>());
         return answer;
     }
 
@@ -9387,7 +9387,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static <T> List<T> sort(Iterable<T> self, boolean mutate, Comparator<? super T> comparator) {
         List<T> list = mutate ? asList(self) : toList(self);
-        Collections.sort(list, comparator);
+        list.sort(comparator);
         return list;
     }
 
@@ -9581,9 +9581,9 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
         // use a comparator of one item or two
         int params = closure.getMaximumNumberOfParameters();
         if (params == 1) {
-            Collections.sort(list, new OrderBy<T>(closure));
+            list.sort(new OrderBy<T>(closure));
         } else {
-            Collections.sort(list, new ClosureComparator<T>(closure));
+            list.sort(new ClosureComparator<T>(closure));
         }
         return list;
     }
@@ -9649,7 +9649,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static <T> List<T> toSorted(Iterable<T> self, Comparator<T> comparator) {
         List<T> list = toList(self);
-        Collections.sort(list, comparator);
+        list.sort(comparator);
         return list;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java b/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
index e911e6c..218a925 100644
--- a/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
+++ b/src/main/java/org/codehaus/groovy/runtime/powerassert/AssertionRenderer.java
@@ -21,7 +21,6 @@ package org.codehaus.groovy.runtime.powerassert;
 import org.codehaus.groovy.runtime.InvokerHelper;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -71,9 +70,7 @@ public final class AssertionRenderer {
     private void sortValues() {
         // it's important to use a stable sort here, otherwise
         // renderValues() will skip the wrong values
-        Collections.sort(recorder.getValues(),
-                (v1, v2) -> v2.getColumn() - v1.getColumn()
-        );
+        recorder.getValues().sort((v1, v2) -> v2.getColumn() - v1.getColumn());
     }
 
     private void renderValues() {
diff --git a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
index 7acd487..1f8cd4d 100644
--- a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
@@ -39,7 +39,6 @@ import org.codehaus.groovy.runtime.AbstractComparator;
 import org.codehaus.groovy.runtime.StringGroovyMethods;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
@@ -237,7 +236,7 @@ public class SortableASTTransformation extends AbstractASTTransformation {
         }
         if (includes != null) {
             Comparator<PropertyNode> includeComparator = (o1, o2) -> Integer.compare(includes.indexOf(o1.getName()), includes.indexOf(o2.getName()));
-            Collections.sort(properties, includeComparator);
+            properties.sort(includeComparator);
         }
         return properties;
     }
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index 7de6e13..a8acd42 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -40,7 +40,6 @@ import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
@@ -219,7 +218,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
 
         if (includes != null) {
             Comparator<ToStringElement> includeComparator = (tse1, tse2) -> Integer.compare(includes.indexOf(tse1.name), includes.indexOf(tse2.name));
-            Collections.sort(elements, includeComparator);
+            elements.sort(includeComparator);
         }
 
         for (ToStringElement el : elements) {
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index def9095..df4be58 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -48,7 +48,6 @@ import org.codehaus.groovy.control.SourceUnit;
 
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -249,7 +248,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
 
         if (includes != null) {
             Comparator<Parameter> includeComparator = (p1, p2) -> Integer.compare(includes.indexOf(p1.getName()), includes.indexOf(p2.getName()));
-            Collections.sort(params, includeComparator);
+            params.sort(includeComparator);
         }
 
         boolean hasMapCons = AnnotatedNodeUtils.hasAnnotation(cNode, MapConstructorASTTransformation.MY_TYPE);


[groovy] 06/18: Trivial refactoring: Can be replaced with single 'Map.computeIfAbsent' method call

Posted by su...@apache.org.
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

commit c63e282e224fc9e374817521ead7b97c76ea312d
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 21:34:26 2019 +0800

    Trivial refactoring: Can be replaced with single 'Map.computeIfAbsent' method call
    
    (cherry picked from commit 76e82806c46366bfbd0cdecc631a91c4d6597387)
---
 .../java/groovy/util/FactoryBuilderSupport.java    |  6 +-----
 .../groovy/ast/decompiled/AsmDecompiler.java       |  5 +----
 .../groovy/runtime/DefaultGroovyMethods.java       |  7 +------
 .../runtime/metaclass/MetaClassRegistryImpl.java   | 24 ++++------------------
 .../stc/GroovyTypeCheckingExtensionSupport.java    |  6 +-----
 .../transform/stc/StaticTypeCheckingVisitor.java   | 12 ++---------
 6 files changed, 10 insertions(+), 50 deletions(-)

diff --git a/src/main/java/groovy/util/FactoryBuilderSupport.java b/src/main/java/groovy/util/FactoryBuilderSupport.java
index aeffa68..be85429 100644
--- a/src/main/java/groovy/util/FactoryBuilderSupport.java
+++ b/src/main/java/groovy/util/FactoryBuilderSupport.java
@@ -169,11 +169,7 @@ public abstract class FactoryBuilderSupport extends Binding {
     }
 
     private Set<String> getRegistrationGroup(String name) {
-        Set<String> group = registrationGroup.get(name);
-        if (group == null ) {
-            group = new TreeSet<String>();
-            registrationGroup.put(name, group);
-        }
+        Set<String> group = registrationGroup.computeIfAbsent(name, k -> new TreeSet<String>());
         return group;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/AsmDecompiler.java b/src/main/java/org/codehaus/groovy/ast/decompiled/AsmDecompiler.java
index 4e0f922..bee97c0 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/AsmDecompiler.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/AsmDecompiler.java
@@ -140,10 +140,7 @@ public abstract class AsmDecompiler {
                     @Override
                     public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) {
                         if (stub.parameterAnnotations == null) stub.parameterAnnotations = new HashMap<Integer, List<AnnotationStub>>(1);
-                        List<AnnotationStub> list = stub.parameterAnnotations.get(parameter);
-                        if (list == null) {
-                            stub.parameterAnnotations.put(parameter, list = new ArrayList<AnnotationStub>());
-                        }
+                        List<AnnotationStub> list = stub.parameterAnnotations.computeIfAbsent(parameter, k -> new ArrayList<AnnotationStub>());
                         AnnotationStub annotationStub = new AnnotationStub(desc);
                         list.add(annotationStub);
                         return readAnnotationMembers(annotationStub);
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 64b3603..3811036 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -5917,12 +5917,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.5.0
      */
     protected static <K, T> void groupAnswer(final Map<K, List<T>> answer, T element, K value) {
-        List<T> groupedElements = answer.get(value);
-
-        if (null == groupedElements) {
-            groupedElements = new ArrayList<T>();
-            answer.put(value, groupedElements);
-        }
+        List<T> groupedElements = answer.computeIfAbsent(value, k -> new ArrayList<T>());
 
         groupedElements.add(element);
     }
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
index ec9fe1b..5edca84 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
@@ -210,11 +210,7 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
                             newParams
                     );
                     final CachedClass declClass = method.getDeclaringClass();
-                    List<MetaMethod> arr = map.get(declClass);
-                    if (arr == null) {
-                        arr = new ArrayList<MetaMethod>(4);
-                        map.put(declClass, arr);
-                    }
+                    List<MetaMethod> arr = map.computeIfAbsent(declClass, k -> new ArrayList<MetaMethod>(4));
                     arr.add(method);
                     instanceMethods.add(method);
                 }
@@ -231,11 +227,7 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
                 if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && method.getAnnotation(Deprecated.class) == null) {
                     CachedClass[] paramTypes = method.getParameterTypes();
                     if (paramTypes.length > 0) {
-                        List<MetaMethod> arr = map.get(paramTypes[0]);
-                        if (arr == null) {
-                            arr = new ArrayList<MetaMethod>(4);
-                            map.put(paramTypes[0], arr);
-                        }
+                        List<MetaMethod> arr = map.computeIfAbsent(paramTypes[0], k -> new ArrayList<MetaMethod>(4));
                         if (useInstanceMethods) {
                             final NewInstanceMetaMethod metaMethod = new NewInstanceMetaMethod(method);
                             arr.add(metaMethod);
@@ -255,11 +247,7 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
         try {
             MetaMethod method = (MetaMethod) aClass.getDeclaredConstructor().newInstance();
             final CachedClass declClass = method.getDeclaringClass();
-            List<MetaMethod> arr = map.get(declClass);
-            if (arr == null) {
-                arr = new ArrayList<MetaMethod>(4);
-                map.put(declClass, arr);
-            }
+            List<MetaMethod> arr = map.computeIfAbsent(declClass, k -> new ArrayList<MetaMethod>(4));
             arr.add(method);
             instanceMethods.add(method);
         } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { /* ignore */
@@ -527,11 +515,7 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
             List<MetaMethod> metaMethods = module.getMetaMethods();
             for (MetaMethod metaMethod : metaMethods) {
                 CachedClass cachedClass = metaMethod.getDeclaringClass();
-                List<MetaMethod> methods = map.get(cachedClass);
-                if (methods == null) {
-                    methods = new ArrayList<MetaMethod>(4);
-                    map.put(cachedClass, methods);
-                }
+                List<MetaMethod> methods = map.computeIfAbsent(cachedClass, k -> new ArrayList<MetaMethod>(4));
                 methods.add(metaMethod);
                 if (metaMethod.isStatic()) {
                     staticMethods.add(metaMethod);
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
index d456331..0852cf3 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
@@ -441,11 +441,7 @@ public class GroovyTypeCheckingExtensionSupport extends AbstractTypeCheckingExte
                 if (methodName == null) {
                     return InvokerHelper.invokeMethod(extension, name, args);
                 }
-                List<Closure> closures = extension.eventHandlers.get(methodName);
-                if (closures == null) {
-                    closures = new LinkedList<Closure>();
-                    extension.eventHandlers.put(methodName, closures);
-                }
+                List<Closure> closures = extension.eventHandlers.computeIfAbsent(methodName, k -> new LinkedList<Closure>());
                 closures.add((Closure) argsArray[0]);
                 return null;
             } else {
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 226064a..37abc13 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1145,11 +1145,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
     protected void pushInstanceOfTypeInfo(final Expression objectOfInstanceOf, final Expression typeExpression) {
         final Map<Object, List<ClassNode>> tempo = typeCheckingContext.temporaryIfBranchTypeInformation.peek();
         Object key = extractTemporaryTypeInfoKey(objectOfInstanceOf);
-        List<ClassNode> potentialTypes = tempo.get(key);
-        if (potentialTypes == null) {
-            potentialTypes = new LinkedList<ClassNode>();
-            tempo.put(key, potentialTypes);
-        }
+        List<ClassNode> potentialTypes = tempo.computeIfAbsent(key, k -> new LinkedList<ClassNode>());
         potentialTypes.add(typeExpression.getType());
     }
 
@@ -4225,11 +4221,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 ((Parameter) accessedVariable).putNodeMetaData(INFERRED_TYPE, cn);
             }
             if (var.isClosureSharedVariable() && cn != null) {
-                List<ClassNode> assignedTypes = typeCheckingContext.closureSharedVariablesAssignmentTypes.get(var);
-                if (assignedTypes == null) {
-                    assignedTypes = new LinkedList<ClassNode>();
-                    typeCheckingContext.closureSharedVariablesAssignmentTypes.put(var, assignedTypes);
-                }
+                List<ClassNode> assignedTypes = typeCheckingContext.closureSharedVariablesAssignmentTypes.computeIfAbsent(var, k -> new LinkedList<ClassNode>());
                 assignedTypes.add(cn);
             }
             if (!typeCheckingContext.temporaryIfBranchTypeInformation.empty()) {


[groovy] 15/18: Trivial refactoring: replaced with empty array

Posted by su...@apache.org.
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

commit be4e98fcbb2535edf666f329585a96ae47614c7f
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 23:04:47 2019 +0800

    Trivial refactoring: replaced with empty array
    
    There are two styles to convert a collection to an array: either using a pre-sized array (like c.toArray(new String[c.size()])) or using an empty array (like c.toArray(new String[0]).
    
    In older Java versions using pre-sized array was recommended, as the reflection call which is necessary to create an array of proper size was quite slow. However since late updates of OpenJDK 6 this call was intrinsified, making the performance of the empty array version the same and sometimes even better, compared to the pre-sized version. Also passing pre-sized array is dangerous for a concurrent or synchronized collection as a data race is possible between the size and toArray call [...]
    
    (cherry picked from commit 001ffd1392be735642cb58a839bff9a3ee77cb09)
---
 src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
index f30b3b6..3ed8da0 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
@@ -114,7 +114,7 @@ public class CompilerConfiguration {
     );
 
     /** The valid targetBytecode values. */
-    public static final String[] ALLOWED_JDKS = JDK_TO_BYTECODE_VERSION_MAP.keySet().toArray(new String[JDK_TO_BYTECODE_VERSION_MAP.size()]);
+    public static final String[] ALLOWED_JDKS = JDK_TO_BYTECODE_VERSION_MAP.keySet().toArray(new String[0]);
 
     /**
      * The default source encoding


[groovy] 12/18: Trivial refactoring: Anonymous type has shorter lambda alternative

Posted by su...@apache.org.
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

commit 8504c0019948716d643214d4c0aed161b6b9ce50
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:52:43 2019 +0800

    Trivial refactoring: Anonymous type has shorter lambda alternative
    
    (cherry picked from commit 0456dfa8b072581dd0fca3a12f5e937085545863)
---
 .../org/codehaus/groovy/util/ReferenceManager.java | 38 ++++++++++------------
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/util/ReferenceManager.java b/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
index 6ab6d56..9bcc168 100644
--- a/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
+++ b/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
@@ -28,28 +28,26 @@ public class ReferenceManager {
         private volatile boolean shouldRun = true; 
         public ThreadedReferenceManager(ReferenceQueue queue) {
             super(queue);
-            thread = new Thread() {
-                public void run() {
-                    ReferenceQueue queue = getReferenceQueue();
-                    java.lang.ref.Reference r=null;
-                    while (shouldRun) {
-                        try {
-                            r = queue.remove(1000);
-                        }  catch (InterruptedException e) {
-                            break;
-                        }
-                        if (r==null) continue;
-                        
-                        if (r instanceof Reference) {
-                            Reference ref = (Reference) r;
-                            Finalizable holder = ref.getHandler();
-                            if (holder!=null) holder.finalizeReference();
-                        }                  
-                        r.clear();
-                        r=null;
+            thread = new Thread(() -> {
+                ReferenceQueue queue1 = getReferenceQueue();
+                java.lang.ref.Reference r=null;
+                while (shouldRun) {
+                    try {
+                        r = queue1.remove(1000);
+                    }  catch (InterruptedException e) {
+                        break;
                     }
+                    if (r==null) continue;
+
+                    if (r instanceof Reference) {
+                        Reference ref = (Reference) r;
+                        Finalizable holder = ref.getHandler();
+                        if (holder!=null) holder.finalizeReference();
+                    }
+                    r.clear();
+                    r=null;
                 }
-            };
+            });
             thread.setContextClassLoader(null);
             thread.setDaemon(true);
             thread.setName(ThreadedReferenceManager.class.getName());


[groovy] 16/18: Trivial refactoring: Can be replaced with `size() != 1`

Posted by su...@apache.org.
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

commit aa81c0e95719c0dfc262393799e6c7252acdf1df
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 23:06:50 2019 +0800

    Trivial refactoring: Can be replaced with `size() != 1`
    
    (cherry picked from commit 56a9452fb99657bc885a28b797b5bcbe3d3669db)
---
 src/main/java/groovy/util/NodeList.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/groovy/util/NodeList.java b/src/main/java/groovy/util/NodeList.java
index c4fac31..2aae2fb 100644
--- a/src/main/java/groovy/util/NodeList.java
+++ b/src/main/java/groovy/util/NodeList.java
@@ -185,7 +185,7 @@ public class NodeList extends ArrayList {
     }
 
     public Node replaceNode(Closure c) {
-        if (size() <= 0 || size() > 1) {
+        if (size() != 1) {
             throw new GroovyRuntimeException(
                     "replaceNode() can only be used to replace a single node, but was applied to " + size() + " nodes");
         }


[groovy] 10/18: Minor refactoring: 'for' loop can be replaced with 'foreach'

Posted by su...@apache.org.
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

commit 1528aeace57fee2a3807ca62485db702354b3182
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:49:34 2019 +0800

    Minor refactoring: 'for' loop can be replaced with 'foreach'
    
    (cherry picked from commit d6765906874951e69647b1d42af98c8212e1f81a)
---
 .../java/groovy/lang/BenchmarkInterceptor.java     |   6 +-
 src/main/java/groovy/lang/ExpandoMetaClass.java    |   5 +-
 src/main/java/groovy/lang/MetaClassImpl.java       |  28 +++---
 .../util/concurrentlinkedhashmap/Weighers.java     |   8 +-
 src/main/java/org/codehaus/groovy/antlr/Main.java  |  31 +++---
 .../groovy/ast/expr/ArgumentListExpression.java    |   3 +-
 .../codehaus/groovy/ast/tools/GenericsUtils.java   |   4 +-
 .../groovy/classgen/AsmClassGenerator.java         |  18 ++--
 .../codehaus/groovy/classgen/BytecodeSequence.java |   7 +-
 .../groovy/classgen/DummyClassGenerator.java       |   9 +-
 .../codehaus/groovy/classgen/asm/CompileStack.java |   9 +-
 .../groovy/classgen/asm/InvocationWriter.java      |  15 ++-
 .../codehaus/groovy/classgen/asm/MethodCaller.java |   3 +-
 .../groovy/reflection/CachedConstructor.java       |   3 +-
 .../groovy/runtime/EncodingGroovyMethods.java      |   4 +-
 .../groovy/runtime/ScriptBytecodeAdapter.java      |   4 +-
 .../runtime/metaclass/ConcurrentReaderHashMap.java | 108 ++++++++++-----------
 .../runtime/metaclass/MetaClassRegistryImpl.java   |   4 +-
 .../groovy/runtime/metaclass/MetaMethodIndex.java  |   4 +-
 .../java/org/codehaus/groovy/syntax/CSTNode.java   |  14 +--
 .../codehaus/groovy/tools/FileSystemCompiler.java  |   4 +-
 .../groovy/tools/javac/JavaStubGenerator.java      |   6 +-
 .../groovy/tools/shell/util/MessageSource.java     |  11 +--
 .../transform/AnnotationCollectorTransform.java    |   3 +-
 .../transform/stc/StaticTypeCheckingSupport.java   |   3 +-
 .../groovy/util/AbstractConcurrentMap.java         |  12 +--
 .../groovy/util/AbstractConcurrentMapBase.java     | 100 +++++++++----------
 .../groovy/util/ManagedConcurrentLinkedQueue.java  |   4 +-
 .../codehaus/groovy/vmplugin/v5/JUnit4Utils.java   |   6 +-
 .../v7/IndyGuardsFiltersAndSignatures.java         |   5 +-
 30 files changed, 199 insertions(+), 242 deletions(-)

diff --git a/src/main/java/groovy/lang/BenchmarkInterceptor.java b/src/main/java/groovy/lang/BenchmarkInterceptor.java
index 793286d..e289bda 100644
--- a/src/main/java/groovy/lang/BenchmarkInterceptor.java
+++ b/src/main/java/groovy/lang/BenchmarkInterceptor.java
@@ -107,14 +107,14 @@ public class BenchmarkInterceptor implements Interceptor {
      */
     public List statistic() {
         List result = new LinkedList();
-        for (Iterator iter = calls.keySet().iterator(); iter.hasNext();) {
+        for (Object o : calls.keySet()) {
             Object[] line = new Object[3];
             result.add(line);
-            line[0] = iter.next();
+            line[0] = o;
             List times = (List) calls.get(line[0]);
             line[1] = times.size() / 2;
             int accTime = 0;
-            for (Iterator it = times.iterator(); it.hasNext();) {
+            for (Iterator it = times.iterator(); it.hasNext(); ) {
                 Long start = (Long) it.next();
                 Long end = (Long) it.next();
                 accTime += end - start;
diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java b/src/main/java/groovy/lang/ExpandoMetaClass.java
index 42abd56..e3bdff7 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -49,7 +49,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -1060,8 +1059,8 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
      * @param modifiedSuperExpandos A list of modified super ExpandoMetaClass
      */
     public void refreshInheritedMethods(Set modifiedSuperExpandos) {
-        for (Iterator i = modifiedSuperExpandos.iterator(); i.hasNext();) {
-            ExpandoMetaClass superExpando = (ExpandoMetaClass) i.next();
+        for (Object modifiedSuperExpando : modifiedSuperExpandos) {
+            ExpandoMetaClass superExpando = (ExpandoMetaClass) modifiedSuperExpando;
             if (superExpando != this) {
                 refreshInheritedMethods(superExpando);
             }
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 8cee0f2..94cb823 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -721,8 +721,8 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                 } else {
                     arr = ((FastArray) answer).copy();
                 }
-                for (Iterator iter = used.iterator(); iter.hasNext(); ) {
-                    MetaMethod element = (MetaMethod) iter.next();
+                for (Object o : used) {
+                    MetaMethod element = (MetaMethod) o;
                     if (!element.getDeclaringClass().getTheClass().isAssignableFrom(sender))
                         continue;
                     filterMatchingMethodForCategory(arr, element);
@@ -1821,8 +1821,8 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
      */
     public void setProperties(Object bean, Map map) {
         checkInitalised();
-        for (Iterator iter = map.entrySet().iterator(); iter.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) iter.next();
+        for (Object o : map.entrySet()) {
+            Map.Entry entry = (Map.Entry) o;
             String key = entry.getKey().toString();
 
             Object value = entry.getValue();
@@ -2116,8 +2116,8 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     private static MetaMethod getCategoryMethodMissing(Class sender) {
         List possibleGenericMethods = GroovyCategorySupport.getCategoryMethods("methodMissing");
         if (possibleGenericMethods != null) {
-            for (Iterator iter = possibleGenericMethods.iterator(); iter.hasNext(); ) {
-                MetaMethod mmethod = (MetaMethod) iter.next();
+            for (Object possibleGenericMethod : possibleGenericMethods) {
+                MetaMethod mmethod = (MetaMethod) possibleGenericMethod;
                 if (!mmethod.getDeclaringClass().getTheClass().isAssignableFrom(sender))
                     continue;
 
@@ -2133,8 +2133,8 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     private static MetaMethod getCategoryMethodGetter(Class sender, String name, boolean useLongVersion) {
         List possibleGenericMethods = GroovyCategorySupport.getCategoryMethods(name);
         if (possibleGenericMethods != null) {
-            for (Iterator iter = possibleGenericMethods.iterator(); iter.hasNext(); ) {
-                MetaMethod mmethod = (MetaMethod) iter.next();
+            for (Object possibleGenericMethod : possibleGenericMethods) {
+                MetaMethod mmethod = (MetaMethod) possibleGenericMethod;
                 if (!mmethod.getDeclaringClass().getTheClass().isAssignableFrom(sender))
                     continue;
 
@@ -2154,8 +2154,8 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     private static MetaMethod getCategoryMethodSetter(Class sender, String name, boolean useLongVersion) {
         List possibleGenericMethods = GroovyCategorySupport.getCategoryMethods(name);
         if (possibleGenericMethods != null) {
-            for (Iterator iter = possibleGenericMethods.iterator(); iter.hasNext(); ) {
-                MetaMethod mmethod = (MetaMethod) iter.next();
+            for (Object possibleGenericMethod : possibleGenericMethods) {
+                MetaMethod mmethod = (MetaMethod) possibleGenericMethod;
                 if (!mmethod.getDeclaringClass().getTheClass().isAssignableFrom(sender))
                     continue;
 
@@ -2472,12 +2472,12 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     }
 
     private void inheritStaticInterfaceFields(LinkedList superClasses, Set interfaces) {
-        for (Iterator interfaceIter = interfaces.iterator(); interfaceIter.hasNext(); ) {
-            CachedClass iclass = (CachedClass) interfaceIter.next();
+        for (Object anInterface : interfaces) {
+            CachedClass iclass = (CachedClass) anInterface;
             SingleKeyHashMap iPropertyIndex = classPropertyIndex.getNotNull(iclass);
             addFields(iclass, iPropertyIndex);
-            for (Iterator classIter = superClasses.iterator(); classIter.hasNext(); ) {
-                CachedClass sclass = (CachedClass) classIter.next();
+            for (Object superClass : superClasses) {
+                CachedClass sclass = (CachedClass) superClass;
                 if (!iclass.getTheClass().isAssignableFrom(sclass.getTheClass())) continue;
                 SingleKeyHashMap sPropertyIndex = classPropertyIndex.getNotNull(sclass);
                 copyNonPrivateFields(iPropertyIndex, sPropertyIndex, null);
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
index 6713c4a..1fb654a 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
@@ -17,7 +17,6 @@ package org.apache.groovy.util.concurrentlinkedhashmap;
 
 import java.io.Serializable;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -235,10 +234,9 @@ public final class Weighers {
         return ((Collection<?>) values).size();
       }
       int size = 0;
-      for (Iterator<?> i = values.iterator(); i.hasNext();) {
-        i.next();
-        size++;
-      }
+        for (Object value : values) {
+            size++;
+        }
       return size;
     }
   }
diff --git a/src/main/java/org/codehaus/groovy/antlr/Main.java b/src/main/java/org/codehaus/groovy/antlr/Main.java
index ae3bb5f..ca10099 100644
--- a/src/main/java/org/codehaus/groovy/antlr/Main.java
+++ b/src/main/java/org/codehaus/groovy/antlr/Main.java
@@ -46,33 +46,29 @@ class Main {
                 System.err.println("Parsing...");
 
                 // for each directory/file specified on the command line
-                for(int i=0; i< args.length;i++) {
-                    if ( args[i].equals("-showtree") ) {
+                for (String arg : args) {
+                    if (arg.equals("-showtree")) {
                         showTree = true;
                     }
                     //else if ( args[i].equals("-xml") ) {
                     //    xml = true;
                     //}
-                    else if ( args[i].equals("-verbose") ) {
+                    else if (arg.equals("-verbose")) {
                         verbose = true;
-                    }
-                    else if ( args[i].equals("-trace") ) {
+                    } else if (arg.equals("-trace")) {
                         GroovyRecognizer.tracing = true;
                         GroovyLexer.tracing = true;
-                    }
-                    else if ( args[i].equals("-traceParser") ) {
+                    } else if (arg.equals("-traceParser")) {
                         GroovyRecognizer.tracing = true;
-                    }
-                    else if ( args[i].equals("-traceLexer") ) {
+                    } else if (arg.equals("-traceLexer")) {
                         GroovyLexer.tracing = true;
+                    } else if (arg.equals("-whitespaceIncluded")) {
+                        whitespaceIncluded = true;
+                    } else {
+                        doFile(new File(arg)); // parse it
                     }
-                                        else if ( args[i].equals("-whitespaceIncluded") ) {
-                                            whitespaceIncluded = true;
-                                        }
-                                        else {
-                        doFile(new File(args[i])); // parse it
-                    }
-                } }
+                }
+            }
             else
                 System.err.println("Usage: java -jar groovyc.jar [-showtree] [-verbose] [-trace{,Lexer,Parser}]"+
                                    "<directory or file name>");
@@ -91,8 +87,7 @@ class Main {
         // If this is a directory, walk each file/dir in that directory
         if (f.isDirectory()) {
             String files[] = f.list();
-            for(int i=0; i < files.length; i++)
-                doFile(new File(f, files[i]));
+            for (String file : files) doFile(new File(f, file));
         }
 
         // otherwise, if this is a groovy file, parse it!
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
index 0f4a7e4..a70fbed 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
@@ -45,8 +45,7 @@ public class ArgumentListExpression extends TupleExpression {
     }
 
     public ArgumentListExpression(Parameter[] parameters) {
-        for (int i = 0; i < parameters.length; i++) {
-            Parameter parameter = parameters[i];
+        for (Parameter parameter : parameters) {
             addExpression(new VariableExpression(parameter));
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
index bb2214b..da4e4be 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
@@ -656,8 +656,8 @@ public class GenericsUtils {
                 ClassNode[] newUpper = upper;
                 if (upper != null && upper.length > 0) {
                     ClassNode[] upperCorrected = new ClassNode[upper.length];
-                    for (int j = 0; j < upper.length; j++) {
-                        upperCorrected[i] = correctToGenericsSpecRecurse(genericsSpec, upper[j]);
+                    for (ClassNode classNode : upper) {
+                        upperCorrected[i] = correctToGenericsSpecRecurse(genericsSpec, classNode);
                     }
                     upper = upperCorrected;
                 }
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 31719f5..2111e0a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -414,9 +414,9 @@ public class AsmClassGenerator extends ClassGenerator {
 
         // Add parameter names to the MethodVisitor (jdk8+ only)
         if (getCompileUnit().getConfig().getParameters()) {
-            for (int i = 0; i < parameters.length; i++) {
+            for (Parameter parameter : parameters) {
                 // TODO handle ACC_SYNTHETIC for enum method parameters?
-                mv.visitParameter(parameters[i].getName(), 0);
+                mv.visitParameter(parameter.getName(), 0);
             }
         }
 
@@ -860,8 +860,8 @@ public class AsmClassGenerator extends ClassGenerator {
         } else {
             return arguments instanceof SpreadExpression;
         }
-        for (Iterator iter = args.iterator(); iter.hasNext();) {
-            if (iter.next() instanceof SpreadExpression) return true;
+        for (Object arg : args) {
+            if (arg instanceof SpreadExpression) return true;
         }
         return false;
     }
@@ -1600,8 +1600,7 @@ public class AsmClassGenerator extends ClassGenerator {
         mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
 
         int i = 0;
-        for (Iterator iter = entries.iterator(); iter.hasNext();) {
-            Object object = iter.next();
+        for (Object object : entries) {
             MapEntryExpression entry = (MapEntryExpression) object;
 
             mv.visitInsn(DUP);
@@ -1699,8 +1698,8 @@ public class AsmClassGenerator extends ClassGenerator {
         int size = 0;
         int dimensions = 0;
         if (sizeExpression != null) {
-            for (Iterator iter = sizeExpression.iterator(); iter.hasNext();) {
-                Expression element = (Expression) iter.next();
+            for (Object o : sizeExpression) {
+                Expression element = (Expression) o;
                 if (element == ConstantExpression.EMPTY_EXPRESSION) break;
                 dimensions++;
                 // let's convert to an int
@@ -1915,8 +1914,7 @@ public class AsmClassGenerator extends ClassGenerator {
         MethodVisitor mv = controller.getMethodVisitor();
         List instructions = bytecodeSequence.getInstructions();
         int mark = controller.getOperandStack().getStackLength();
-        for (Iterator iterator = instructions.iterator(); iterator.hasNext();) {
-            Object part = iterator.next();
+        for (Object part : instructions) {
             if (part instanceof EmptyExpression) {
                 mv.visitInsn(ACONST_NULL);
             } else if (part instanceof Expression) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/BytecodeSequence.java b/src/main/java/org/codehaus/groovy/classgen/BytecodeSequence.java
index 7da3c4d..b70b855 100644
--- a/src/main/java/org/codehaus/groovy/classgen/BytecodeSequence.java
+++ b/src/main/java/org/codehaus/groovy/classgen/BytecodeSequence.java
@@ -23,7 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 import org.codehaus.groovy.ast.stmt.Statement;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -66,10 +65,10 @@ public class BytecodeSequence extends Statement {
             gen.visitBytecodeSequence(this);
             return;
         }
-        for (Iterator iterator = instructions.iterator(); iterator.hasNext();) {
-            Object part = (Object) iterator.next();
+        for (BytecodeInstruction instruction : instructions) {
+            Object part = (Object) instruction;
             if (part instanceof ASTNode) {
-                ((ASTNode)part).visit(visitor);
+                ((ASTNode) part).visit(visitor);
             }
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
index b85f91a..8b7e05d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
@@ -34,8 +34,6 @@ import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 
-import java.util.Iterator;
-
 /**
  * To generate a class that has all the fields and methods, except that fields are not initialized
  * and methods are empty. It's intended for being used as a place holder during code generation
@@ -84,8 +82,7 @@ public class DummyClassGenerator extends ClassGenerator {
 
             classNode.visitContents(this);
 
-            for (Iterator iter = innerClasses.iterator(); iter.hasNext();) {
-                ClassNode innerClass = (ClassNode) iter.next();
+            for (ClassNode innerClass : innerClasses) {
                 ClassNode innerClassType = innerClass;
                 String innerClassInternalName = BytecodeHelper.getClassInternalName(innerClassType);
                 String outerClassName = internalClassName; // default for inner classes
@@ -163,8 +160,8 @@ public class DummyClassGenerator extends ClassGenerator {
     }
 
     protected void visitParameters(ASTNode node, Parameter[] parameters) {
-        for (int i = 0, size = parameters.length; i < size; i++) {
-            visitParameter(node, parameters[i]);
+        for (Parameter parameter : parameters) {
+            visitParameter(node, parameter);
         }
     }
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
index 5686b75..4bd54c4 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
@@ -31,7 +31,6 @@ import org.objectweb.asm.Opcodes;
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -239,8 +238,8 @@ public class CompileStack implements Opcodes {
     private void setEndLabels(){
         Label endLabel = new Label();
         controller.getMethodVisitor().visitLabel(endLabel);
-        for (Iterator iter = stackVariables.values().iterator(); iter.hasNext();) {
-            BytecodeVariable var = (BytecodeVariable) iter.next();
+        for (Object o : stackVariables.values()) {
+            BytecodeVariable var = (BytecodeVariable) o;
             var.setEndLabel(endLabel);
         }
         thisEndLabel = endLabel;
@@ -365,8 +364,8 @@ public class CompileStack implements Opcodes {
                 mv.visitLocalVariable("this", className, null, thisStartLabel, thisEndLabel, 0);
             }
 
-            for (Iterator iterator = usedVariables.iterator(); iterator.hasNext();) {
-                BytecodeVariable v = (BytecodeVariable) iterator.next();
+            for (Object usedVariable : usedVariables) {
+                BytecodeVariable v = (BytecodeVariable) usedVariable;
                 ClassNode t = v.getType();
                 if (v.isHolder()) t = ClassHelper.REFERENCE_TYPE;
                 String type = BytecodeHelper.getTypeDescription(t);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index c4a40ad..472f70a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -810,8 +810,8 @@ public class InvocationWriter {
         Label defaultLabel = new Label();
         Label afterSwitch = new Label();
         mv.visitLookupSwitchInsn(defaultLabel, indices, targets);
-        for (int i = 0; i < targets.length; i++) {
-            mv.visitLabel(targets[i]);
+        for (Label target : targets) {
+            mv.visitLabel(target);
             // to keep the stack height, we need to leave
             // one Object[] on the stack as last element. At the
             // same time, we need the Object[] on top of the stack
@@ -845,13 +845,13 @@ public class InvocationWriter {
             // vargs need special attention and transformation though
             Parameter[] parameters = cn.getParameters();
             int lengthWithoutVargs = parameters.length;
-            if (parameters.length>0 && parameters[parameters.length-1].getType().isArray()) {
+            if (parameters.length > 0 && parameters[parameters.length - 1].getType().isArray()) {
                 lengthWithoutVargs--;
             }
             for (int p = 0; p < lengthWithoutVargs; p++) {
                 loadAndCastElement(operandStack, mv, parameters, p);
             }
-            if (parameters.length>lengthWithoutVargs) {
+            if (parameters.length > lengthWithoutVargs) {
                 ClassNode type = parameters[lengthWithoutVargs].getType();
                 BytecodeHelper.pushConstant(mv, lengthWithoutVargs);
                 controller.getAcg().visitClassExpression(new ClassExpression(type));
@@ -907,12 +907,11 @@ public class InvocationWriter {
     // we match only on the number of arguments, not anything else
     private static ConstructorNode getMatchingConstructor(List<ConstructorNode> constructors, List<Expression> argumentList) {
         ConstructorNode lastMatch = null;
-        for (int i=0; i<constructors.size(); i++) {
-            ConstructorNode cn = constructors.get(i);
+        for (ConstructorNode cn : constructors) {
             Parameter[] params = cn.getParameters();
             // if number of parameters does not match we have no match
-            if (argumentList.size()!=params.length) continue;
-            if (lastMatch==null) {
+            if (argumentList.size() != params.length) continue;
+            if (lastMatch == null) {
                 lastMatch = cn;
             } else {
                 // we already had a match so we don't make a direct call at all
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
index 9ebb34d..85fae66 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
@@ -75,8 +75,7 @@ public class MethodCaller implements Opcodes {
 
     protected Method getMethod() {
         Method[] methods = theClass.getMethods();
-        for (int i = 0; i < methods.length; i++) {
-            Method method = methods[i];
+        for (Method method : methods) {
             if (method.getName().equals(name)) {
                 return method;
             }
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
index cb43103..347b9b0 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
@@ -47,8 +47,7 @@ public class CachedConstructor extends ParameterTypes {
 
     public static CachedConstructor find(Constructor constructor) {
         CachedConstructor[] constructors = ReflectionCache.getCachedClass(constructor.getDeclaringClass()).getConstructors();
-        for (int i = 0; i < constructors.length; i++) {
-            CachedConstructor cachedConstructor = constructors[i];
+        for (CachedConstructor cachedConstructor : constructors) {
             if (cachedConstructor.cachedConstructor.equals(constructor))
                 return cachedConstructor;
         }
diff --git a/src/main/java/org/codehaus/groovy/runtime/EncodingGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/EncodingGroovyMethods.java
index d41f04e..2d4ba4f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/EncodingGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/EncodingGroovyMethods.java
@@ -317,9 +317,9 @@ public class EncodingGroovyMethods {
     public static Writable encodeHex(final byte[] data) {
         return new Writable() {
             public Writer writeTo(Writer out) throws IOException {
-                for (int i = 0; i < data.length; i++) {
+                for (byte datum : data) {
                     // convert byte into unsigned hex string
-                    String hexString = Integer.toHexString(data[i] & 0xFF);
+                    String hexString = Integer.toHexString(datum & 0xFF);
 
                     // add leading zero if the length of the string is one
                     if (hexString.length() < 2) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index df1a4c4..69cd50f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -799,8 +799,8 @@ public class ScriptBytecodeAdapter {
         List ret = new ArrayList();
         int argsPos = 0;
         int spreadPos = 0;
-        for (int pos = 0; pos < positions.length; pos++) {
-            for (; argsPos < positions[pos]; argsPos++) {
+        for (int position : positions) {
+            for (; argsPos < position; argsPos++) {
                 ret.add(args[argsPos]);
             }
             Object value = spreads[spreadPos];
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
index 560cf97..86277db 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
@@ -572,42 +572,40 @@ public class ConcurrentReaderHashMap
      * reader thread that may be in the midst of traversing table
      * right now.)
      */
-    
-    for (int i = 0; i < oldCapacity ; i++) {
-      // We need to guarantee that any existing reads of old Map can
-      // proceed. So we cannot yet null out each bin.
-      Entry e = oldTable[i];
-      
-      if (e != null) {
-        int idx = e.hash & mask;
-        Entry next = e.next;
-        
-        //  Single node on list
-        if (next == null) 
-          newTable[idx] = e;
-        
-        else {    
-          // Reuse trailing consecutive sequence of all same bit
-          Entry lastRun = e;
-          int lastIdx = idx;
-          for (Entry last = next; last != null; last = last.next) {
-            int k = last.hash & mask;
-            if (k != lastIdx) {
-              lastIdx = k;
-              lastRun = last;
-            }
-          }
-          newTable[lastIdx] = lastRun;
-          
-          // Clone all remaining nodes
-          for (Entry p = e; p != lastRun; p = p.next) {
-            int k = p.hash & mask;
-            newTable[k] = new Entry(p.hash, p.key, 
-                                    p.value, newTable[k]);
+
+      for (Entry e : oldTable) {
+          // We need to guarantee that any existing reads of old Map can
+          // proceed. So we cannot yet null out each bin.
+          if (e != null) {
+              int idx = e.hash & mask;
+              Entry next = e.next;
+
+              //  Single node on list
+              if (next == null)
+                  newTable[idx] = e;
+
+              else {
+                  // Reuse trailing consecutive sequence of all same bit
+                  Entry lastRun = e;
+                  int lastIdx = idx;
+                  for (Entry last = next; last != null; last = last.next) {
+                      int k = last.hash & mask;
+                      if (k != lastIdx) {
+                          lastIdx = k;
+                          lastRun = last;
+                      }
+                  }
+                  newTable[lastIdx] = lastRun;
+
+                  // Clone all remaining nodes
+                  for (Entry p = e; p != lastRun; p = p.next) {
+                      int k = p.hash & mask;
+                      newTable[k] = new Entry(p.hash, p.key,
+                              p.value, newTable[k]);
+                  }
+              }
           }
-        }
       }
-    }
 
     table = newTable;
     recordModification(newTable);
@@ -716,12 +714,12 @@ public class ConcurrentReaderHashMap
     if (value == null) throw new NullPointerException();
 
     Entry tab[] = getTableForReading();
-    
-    for (int i = 0 ; i < tab.length; ++i) {
-      for (Entry e = tab[i] ; e != null ; e = e.next) 
-        if (value.equals(e.value))
-          return true;
-    }
+
+      for (Entry entry : tab) {
+          for (Entry e = entry; e != null; e = e.next)
+              if (value.equals(e.value))
+                  return true;
+      }
 
     return false;
   }
@@ -768,12 +766,12 @@ public class ConcurrentReaderHashMap
     while (n >= threshold)
       rehash();
 
-    for (Iterator it = t.entrySet().iterator(); it.hasNext();) {
-      Map.Entry entry = (Map.Entry) it.next();
-      Object key = entry.getKey();
-      Object value = entry.getValue();
-      put(key, value);
-    }
+      for (Object o : t.entrySet()) {
+          Map.Entry entry = (Map.Entry) o;
+          Object key = entry.getKey();
+          Object value = entry.getValue();
+          put(key, value);
+      }
   }
 
 
@@ -868,14 +866,12 @@ public class ConcurrentReaderHashMap
     }
     public Object[] toArray() {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray();
     }
     public Object[] toArray(Object[] a) {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray(a);
     }
   }
@@ -911,14 +907,12 @@ public class ConcurrentReaderHashMap
     }
     public Object[] toArray() {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray();
     }
     public Object[] toArray(Object[] a) {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray(a);
     }
   }
@@ -964,14 +958,12 @@ public class ConcurrentReaderHashMap
     }
     public Object[] toArray() {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray();
     }
     public Object[] toArray(Object[] a) {
       Collection c = new ArrayList();
-      for (Iterator i = iterator(); i.hasNext(); )
-          c.add(i.next());
+        for (Object o : this) c.add(o);
       return c.toArray(a);
     }
   }
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
index 5edca84..791323d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaClassRegistryImpl.java
@@ -389,8 +389,8 @@ public class MetaClassRegistryImpl implements MetaClassRegistry{
     protected void fireConstantMetaClassUpdate(Object obj, Class c, final MetaClass oldMC, MetaClass newMc) {
         MetaClassRegistryChangeEventListener[]  listener = getMetaClassRegistryChangeEventListeners();
         MetaClassRegistryChangeEvent cmcu = new MetaClassRegistryChangeEvent(this, obj, c, oldMC, newMc);
-        for (int i = 0; i<listener.length; i++) {
-            listener[i].updateConstantMetaClass(cmcu);
+        for (MetaClassRegistryChangeEventListener metaClassRegistryChangeEventListener : listener) {
+            metaClassRegistryChangeEventListener.updateConstantMetaClass(cmcu);
         }
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
index b70b344..e1ca0f8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
@@ -487,8 +487,8 @@ public class MetaMethodIndex {
         Entry[] table = this.table;
         int length = table.length;
 
-        for (int j = 0; j < length; j++) {
-            for (Entry e = table[j]; e != null; e = e.nextHashEntry) {
+        for (Entry entry : table) {
+            for (Entry e = entry; e != null; e = e.nextHashEntry) {
                 if (e.methods instanceof FastArray)
                     e.methodsForSuper = ((FastArray) e.methods).copy();
                 else
diff --git a/src/main/java/org/codehaus/groovy/syntax/CSTNode.java b/src/main/java/org/codehaus/groovy/syntax/CSTNode.java
index 631c8ed..e074681 100644
--- a/src/main/java/org/codehaus/groovy/syntax/CSTNode.java
+++ b/src/main/java/org/codehaus/groovy/syntax/CSTNode.java
@@ -85,8 +85,8 @@ public abstract class CSTNode {
      */
     public boolean isOneOf(int[] types) {
         int meaning = getMeaning();
-        for (int i = 0; i < types.length; i++) {
-            if (Types.ofType(meaning, types[i])) {
+        for (int type : types) {
+            if (Types.ofType(meaning, type)) {
                 return true;
             }
         }
@@ -99,8 +99,8 @@ public abstract class CSTNode {
      */
     public boolean isAllOf(int[] types) {
         int meaning = getMeaning();
-        for (int i = 0; i < types.length; i++) {
-            if (!Types.ofType(meaning, types[i])) {
+        for (int type : types) {
+            if (!Types.ofType(meaning, type)) {
                 return false;
             }
         }
@@ -114,9 +114,9 @@ public abstract class CSTNode {
      */
     public int getMeaningAs(int[] types) {
 
-        for (int i = 0; i < types.length; i++) {
-            if (isA(types[i])) {
-                return types[i];
+        for (int type : types) {
+            if (isA(type)) {
+                return type;
             }
         }
 
diff --git a/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java b/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java
index 2c02e86..39e103f 100644
--- a/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java
+++ b/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java
@@ -299,8 +299,8 @@ public class FileSystemCompiler {
             file.delete();
         } else if (file.isDirectory()) {
             File[] files = file.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                deleteRecursive(files[i]);
+            for (File value : files) {
+                deleteRecursive(value);
             }
             file.delete();
         }
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 3fec399..2510ff0 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -611,9 +611,9 @@ public class JavaStubGenerator {
 
 
         // if all remaining exceptions are used in the stub we are good
-        outer: for (int i=0; i<superExceptions.length; i++) {
-            ClassNode superExc = superExceptions[i];
-            for (ClassNode stub:stubExceptions) {
+        outer:
+        for (ClassNode superExc : superExceptions) {
+            for (ClassNode stub : stubExceptions) {
                 if (stub.isDerivedFrom(superExc)) continue outer;
             }
             // not found
diff --git a/src/main/java/org/codehaus/groovy/tools/shell/util/MessageSource.java b/src/main/java/org/codehaus/groovy/tools/shell/util/MessageSource.java
index 1797043..82f5e6a 100644
--- a/src/main/java/org/codehaus/groovy/tools/shell/util/MessageSource.java
+++ b/src/main/java/org/codehaus/groovy/tools/shell/util/MessageSource.java
@@ -97,16 +97,15 @@ public class MessageSource
         MissingResourceException error = null;
         
         ResourceBundle[] bundles = getBundles();
-        
-        for (int i=0; i<bundles.length; i++) {
+
+        for (ResourceBundle bundle : bundles) {
             try {
-                return bundles[i].getString(code);
-            }
-            catch (MissingResourceException e) {
+                return bundle.getString(code);
+            } catch (MissingResourceException e) {
                 //
                 // FIXME: For now just save the first error, should really roll a new message with all of the details
                 //
-                
+
                 if (error != null) {
                     error = e;
                 }
diff --git a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
index e256fc0..efe75e7 100644
--- a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
+++ b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
@@ -97,8 +97,7 @@ public class AnnotationCollectorTransform {
          */
         public void transformClass(ClassNode cn) {
             AnnotationNode collector = null;
-            for (ListIterator<AnnotationNode> it = cn.getAnnotations().listIterator(); it.hasNext(); ) {
-                AnnotationNode an = it.next();
+            for (AnnotationNode an : cn.getAnnotations()) {
                 if (an.getClassNode().getName().equals(AnnotationCollector.class.getName())) {
                     collector = an;
                     break;
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index dd74327..f27988a 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -978,8 +978,7 @@ public abstract class StaticTypeCheckingSupport {
         if (c.equals(interfaceClass)) return 0;
         ClassNode[] interfaces = c.getInterfaces();
         int max = -1;
-        for (int i = 0; i < interfaces.length; i++) {
-            final ClassNode anInterface = interfaces[i];
+        for (final ClassNode anInterface : interfaces) {
             int sub = getMaximumInterfaceDistance(anInterface, interfaceClass);
             // we need to keep the -1 to track the mismatch, a +1
             // by any means could let it look like a direct match
diff --git a/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMap.java b/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMap.java
index c341326..3fbf8e0 100644
--- a/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMap.java
+++ b/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMap.java
@@ -68,8 +68,8 @@ public abstract class AbstractConcurrentMap<K, V> extends AbstractConcurrentMapB
                 }
                 else {
                     Object arr [] = (Object[]) o;
-                    for (int i = 0; i < arr.length; i++) {
-                        Entry<K,V> e = (Entry<K,V>) arr[i];
+                    for (Object value : arr) {
+                        Entry<K, V> e = (Entry<K, V>) value;
                         if (e != null && e.isEqual(key, hash)) {
                             return e.getValue();
                         }
@@ -91,8 +91,8 @@ public abstract class AbstractConcurrentMap<K, V> extends AbstractConcurrentMapB
                 }
                 else {
                     Object arr [] = (Object[]) o;
-                    for (int i = 0; i < arr.length; i++) {
-                        Entry<K,V> e = (Entry<K,V>) arr[i];
+                    for (Object item : arr) {
+                        Entry<K, V> e = (Entry<K, V>) item;
                         if (e != null && e.isEqual(key, hash)) {
                             return e;
                         }
@@ -129,8 +129,8 @@ public abstract class AbstractConcurrentMap<K, V> extends AbstractConcurrentMapB
                     }
                     else {
                         Object arr [] = (Object[]) o;
-                        for (int i = 0; i < arr.length; i++) {
-                            Entry e = (Entry) arr[i];
+                        for (Object item : arr) {
+                            Entry e = (Entry) item;
                             if (e != null && e.isEqual(key, hash)) {
                                 e.setValue(value);
                                 return e;
diff --git a/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMapBase.java b/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMapBase.java
index f0625f6..500e3d4 100644
--- a/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMapBase.java
+++ b/src/main/java/org/codehaus/groovy/util/AbstractConcurrentMapBase.java
@@ -68,24 +68,22 @@ public abstract class AbstractConcurrentMapBase {
 
     public int fullSize() {
         int count = 0;
-        for (int i = 0; i < segments.length; i++) {
-            segments[i].lock();
+        for (Segment segment : segments) {
+            segment.lock();
             try {
-                for (int j = 0; j < segments[i].table.length; j++) {
-                    Object o = segments[i].table [j];
+                for (int j = 0; j < segment.table.length; j++) {
+                    Object o = segment.table[j];
                     if (o != null) {
                         if (o instanceof Entry) {
                             count++;
-                        }
-                        else {
-                            Object arr [] = (Object[]) o;
+                        } else {
+                            Object arr[] = (Object[]) o;
                             count += arr.length;
                         }
                     }
                 }
-            }
-            finally {
-                segments[i].unlock();
+            } finally {
+                segment.unlock();
             }
         }
         return count;
@@ -93,30 +91,28 @@ public abstract class AbstractConcurrentMapBase {
 
     public int size() {
         int count = 0;
-        for (int i = 0; i < segments.length; i++) {
-            segments[i].lock();
+        for (Segment segment : segments) {
+            segment.lock();
             try {
-                for (int j = 0; j < segments[i].table.length; j++) {
-                    Object o = segments[i].table [j];
+                for (int j = 0; j < segment.table.length; j++) {
+                    Object o = segment.table[j];
                     if (o != null) {
                         if (o instanceof Entry) {
                             Entry e = (Entry) o;
                             if (e.isValid())
-                              count++;
-                        }
-                        else {
-                            Object arr [] = (Object[]) o;
-                            for (int k = 0; k < arr.length; k++) {
-                                Entry info = (Entry) arr[k];
+                                count++;
+                        } else {
+                            Object arr[] = (Object[]) o;
+                            for (Object value : arr) {
+                                Entry info = (Entry) value;
                                 if (info != null && info.isValid())
                                     count++;
                             }
                         }
                     }
                 }
-            }
-            finally {
-                segments[i].unlock();
+            } finally {
+                segment.unlock();
             }
         }
         return count;
@@ -124,30 +120,28 @@ public abstract class AbstractConcurrentMapBase {
 
     public Collection values() {
         Collection result = new LinkedList();
-        for (int i = 0; i < segments.length; i++) {
-            segments[i].lock();
+        for (Segment segment : segments) {
+            segment.lock();
             try {
-                for (int j = 0; j < segments[i].table.length; j++) {
-                    Object o = segments[i].table [j];
+                for (int j = 0; j < segment.table.length; j++) {
+                    Object o = segment.table[j];
                     if (o != null) {
                         if (o instanceof Entry) {
                             Entry e = (Entry) o;
                             if (e.isValid())
-                              result.add(e);
-                        }
-                        else {
-                            Object arr [] = (Object[]) o;
-                            for (int k = 0; k < arr.length; k++) {
-                                Entry info = (Entry) arr[k];
+                                result.add(e);
+                        } else {
+                            Object arr[] = (Object[]) o;
+                            for (Object value : arr) {
+                                Entry info = (Entry) value;
                                 if (info != null && info.isValid())
                                     result.add(info);
                             }
                         }
                     }
                 }
-            }
-            finally {
-                segments[i].unlock();
+            } finally {
+                segment.unlock();
             }
         }
         return result;
@@ -187,19 +181,17 @@ public abstract class AbstractConcurrentMapBase {
                     else {
                         Object arr [] = (Object[]) o;
                         Object res = null;
-                        for (int i = 0; i < arr.length; i++) {
-                            Entry info = (Entry) arr[i];
+                        for (Object value : arr) {
+                            Entry info = (Entry) value;
                             if (info != null) {
-                                if(info != e) {
-                                  if (info.isValid()) {
-                                     res = put(info, res);
-                                  }
-                                  else {
-                                      newCount--;
-                                  }
-                                }
-                                else {
-                                  newCount--;
+                                if (info != e) {
+                                    if (info.isValid()) {
+                                        res = put(info, res);
+                                    } else {
+                                        newCount--;
+                                    }
+                                } else {
+                                    newCount--;
                                 }
                             }
                         }
@@ -261,8 +253,7 @@ public abstract class AbstractConcurrentMapBase {
             Object[] newTable = new Object[newCount+1 < threshold ? oldCapacity : oldCapacity << 1];
             int sizeMask = newTable.length - 1;
             newCount = 0;
-            for (int i = 0; i < oldCapacity ; i++) {
-                Object o = oldTable[i];
+            for (Object o : oldTable) {
                 if (o != null) {
                     if (o instanceof Entry) {
                         Entry e = (Entry) o;
@@ -271,11 +262,10 @@ public abstract class AbstractConcurrentMapBase {
                             put(e, index, newTable);
                             newCount++;
                         }
-                    }
-                    else {
-                        Object arr [] = (Object[]) o;
-                        for (int j = 0; j < arr.length; j++) {
-                            Entry e = (Entry) arr[j];
+                    } else {
+                        Object arr[] = (Object[]) o;
+                        for (Object value : arr) {
+                            Entry e = (Entry) value;
                             if (e != null && e.isValid()) {
                                 int index = e.getHash() & sizeMask;
                                 put(e, index, newTable);
diff --git a/src/main/java/org/codehaus/groovy/util/ManagedConcurrentLinkedQueue.java b/src/main/java/org/codehaus/groovy/util/ManagedConcurrentLinkedQueue.java
index ab98f72..ea697c2 100644
--- a/src/main/java/org/codehaus/groovy/util/ManagedConcurrentLinkedQueue.java
+++ b/src/main/java/org/codehaus/groovy/util/ManagedConcurrentLinkedQueue.java
@@ -91,8 +91,8 @@ public class ManagedConcurrentLinkedQueue<T> implements Iterable<T> {
      */
     public List<T> values() {
         List<T> result = new ArrayList<T>();
-        for (Iterator<T> itr = iterator(); itr.hasNext(); ) {
-            result.add(itr.next());
+        for (T t : this) {
+            result.add(t);
         }
         return result;
     }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v5/JUnit4Utils.java b/src/main/java/org/codehaus/groovy/vmplugin/v5/JUnit4Utils.java
index 621bc39..10ce200 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v5/JUnit4Utils.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v5/JUnit4Utils.java
@@ -54,8 +54,7 @@ public class JUnit4Utils {
                 } else {
                     Class testAnnotationClass = loader.loadClass("org.junit.Test");
                     Method[] methods = scriptClass.getMethods();
-                    for (int i = 0; i < methods.length; i++) {
-                        Method method = methods[i];
+                    for (Method method : methods) {
                         annotation = method.getAnnotation(testAnnotationClass);
                         if (annotation != null) {
                             isTest = true;
@@ -89,8 +88,7 @@ public class JUnit4Utils {
             System.out.print(", Failures: " + InvokerHelper.getProperty(result, "failureCount"));
             System.out.println(", Time: " + InvokerHelper.getProperty(result, "runTime"));
             List failures = (List) InvokerHelper.getProperty(result, "failures");
-            for (int i = 0; i < failures.size(); i++) {
-                Object f = failures.get(i);
+            for (Object f : failures) {
                 System.out.println("Test Failure: " + InvokerHelper.getProperty(f, "description"));
                 System.out.println(InvokerHelper.getProperty(f, "trace"));
             }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyGuardsFiltersAndSignatures.java b/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyGuardsFiltersAndSignatures.java
index d86bcfd..2cffc58 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyGuardsFiltersAndSignatures.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v7/IndyGuardsFiltersAndSignatures.java
@@ -43,7 +43,6 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 
 import static org.codehaus.groovy.vmplugin.v7.IndyInterface.LOOKUP;
@@ -131,8 +130,8 @@ public class IndyGuardsFiltersAndSignatures {
      * with property map.
      */
     public static Object setBeanProperties(MetaClass mc, Object bean, Map properties) {
-        for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
-            Map.Entry entry = (Map.Entry) iter.next();
+        for (Object o : properties.entrySet()) {
+            Map.Entry entry = (Map.Entry) o;
             String key = entry.getKey().toString();
 
             Object value = entry.getValue();


[groovy] 11/18: Minor refactoring: 'while' loop can be replaced with 'foreach'

Posted by su...@apache.org.
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

commit 05431cfeb66b820c15408e2dd2f486aab27156ed
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 22:50:59 2019 +0800

    Minor refactoring: 'while' loop can be replaced with 'foreach'
    
    (cherry picked from commit 7ad8e563ad119efa1a68f5ae23cb533a96219a31)
---
 .../groovy/antlr/java/Java2GroovyProcessor.java      |  5 +----
 .../groovy/antlr/treewalker/CompositeVisitor.java    | 20 ++++++++++++--------
 .../antlr/treewalker/FlatNodeListTraversal.java      |  8 +++-----
 .../org/codehaus/groovy/control/ErrorCollector.java  | 12 +++++-------
 .../java/org/codehaus/groovy/control/Janitor.java    |  6 ++----
 5 files changed, 23 insertions(+), 28 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/antlr/java/Java2GroovyProcessor.java b/src/main/java/org/codehaus/groovy/antlr/java/Java2GroovyProcessor.java
index 689df7e..3f21086 100644
--- a/src/main/java/org/codehaus/groovy/antlr/java/Java2GroovyProcessor.java
+++ b/src/main/java/org/codehaus/groovy/antlr/java/Java2GroovyProcessor.java
@@ -38,16 +38,13 @@ import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.PrintStream;
 import java.io.StringReader;
-import java.util.Iterator;
 import java.util.List;
 
 @Deprecated
 public class Java2GroovyProcessor {
 
     public static void processFiles(List<String> fileNames) throws Exception {
-        Iterator i = fileNames.iterator();
-        while (i.hasNext()) {
-            String filename = (String) i.next();
+        for (String filename : fileNames) {
             File f = new File(filename);
             String text = ResourceGroovyMethods.getText(f);
             System.out.println(convert(filename, text, true, true));
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
index c89b69d..87e242f 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
@@ -60,8 +60,9 @@ public class CompositeVisitor implements Visitor{
     }
 
     public void setUp() {
-        Iterator itr = visitors.iterator();
-        while (itr.hasNext()) {((Visitor)itr.next()).setUp();}
+        for (Object visitor : visitors) {
+            ((Visitor) visitor).setUp();
+        }
     }
 
     public void visitAbstract(GroovySourceAST t, int visit) {
@@ -1160,18 +1161,21 @@ public class CompositeVisitor implements Visitor{
     }
 
     public void tearDown() {
-        Iterator itr = backToFrontVisitors.iterator();
-        while (itr.hasNext()) {((Visitor)itr.next()).tearDown();}
+        for (Object backToFrontVisitor : backToFrontVisitors) {
+            ((Visitor) backToFrontVisitor).tearDown();
+        }
     }
 
     public void push(GroovySourceAST t) {
-        Iterator itr = visitors.iterator();
-        while (itr.hasNext()) {((Visitor)itr.next()).push(t);}
+        for (Object visitor : visitors) {
+            ((Visitor) visitor).push(t);
+        }
     }
     public GroovySourceAST pop() {
         GroovySourceAST lastNodePopped = null;
-        Iterator itr = backToFrontVisitors.iterator();
-        while (itr.hasNext()) {lastNodePopped = (GroovySourceAST) ((Visitor)itr.next()).pop();}
+        for (Object backToFrontVisitor : backToFrontVisitors) {
+            lastNodePopped = (GroovySourceAST) ((Visitor) backToFrontVisitor).pop();
+        }
         return lastNodePopped;
     }
 }
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
index d64fa20..14cc8cb 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
@@ -22,7 +22,6 @@ import antlr.collections.AST;
 import org.codehaus.groovy.antlr.AntlrASTProcessor;
 import org.codehaus.groovy.antlr.GroovySourceAST;
 
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -44,10 +43,9 @@ public class FlatNodeListTraversal extends TraversalHelper {
         List listOfAllNodesInThisAST = collector.getNodes();
         
         // process each node in turn
-        setUp(node);        
-        Iterator itr = listOfAllNodesInThisAST.iterator();
-        while (itr.hasNext()) {
-            GroovySourceAST currentNode = (GroovySourceAST) itr.next();
+        setUp(node);
+        for (Object o : listOfAllNodesInThisAST) {
+            GroovySourceAST currentNode = (GroovySourceAST) o;
             accept(currentNode);
         }
         tearDown(node);
diff --git a/src/main/java/org/codehaus/groovy/control/ErrorCollector.java b/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
index 67de50a..232d3df 100644
--- a/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
+++ b/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
@@ -28,7 +28,6 @@ import org.codehaus.groovy.syntax.SyntaxException;
 
 import java.io.PrintWriter;
 import java.io.Serializable;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -318,15 +317,14 @@ public class ErrorCollector implements Serializable {
 
     private void write(PrintWriter writer, Janitor janitor, List messages, String txt) {
         if (messages==null || messages.isEmpty()) return;
-        Iterator iterator = messages.iterator();
-        while (iterator.hasNext()) {
-            Message message = (Message) iterator.next();
+        for (Object o : messages) {
+            Message message = (Message) o;
             message.write(writer, janitor);
-            
-            if (configuration.getDebug() && (message instanceof SyntaxErrorMessage)){
+
+            if (configuration.getDebug() && (message instanceof SyntaxErrorMessage)) {
                 SyntaxErrorMessage sem = (SyntaxErrorMessage) message;
                 sem.getCause().printStackTrace(writer);
-            } 
+            }
             writer.println();
         }
 
diff --git a/src/main/java/org/codehaus/groovy/control/Janitor.java b/src/main/java/org/codehaus/groovy/control/Janitor.java
index 862bc09..46885ed 100644
--- a/src/main/java/org/codehaus/groovy/control/Janitor.java
+++ b/src/main/java/org/codehaus/groovy/control/Janitor.java
@@ -19,7 +19,6 @@
 package org.codehaus.groovy.control;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -34,9 +33,8 @@ public class Janitor implements HasCleanup {
     }
 
     public void cleanup() {
-        Iterator iterator = pending.iterator();
-        while (iterator.hasNext()) {
-            HasCleanup object = (HasCleanup) iterator.next();
+        for (Object o : pending) {
+            HasCleanup object = (HasCleanup) o;
 
             try {
                 object.cleanup();


[groovy] 18/18: Trivial refactoring: avoid redundant operations on list

Posted by su...@apache.org.
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

commit 10096e64a1278e1520fbc9a49db441ade0e21876
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 23:33:43 2019 +0800

    Trivial refactoring: avoid redundant operations on list
    
    (cherry picked from commit db11d661940e63ee10046f8c602a2648fff214e6)
---
 src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index 7c8390d..639dcbe 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -202,10 +202,8 @@ public class Java9 extends Java8 {
 
             // GROOVY-9081 "3) Access public members of private class", e.g. Collections.unmodifiableMap([:]).toString()
             // try to find the visible method from its superclasses
-            List<Class<?>> superclassList = findSuperclasses(theClass);
-            List<Class<?>> classList = new LinkedList<>();
-            classList.add(theClass);
-            classList.addAll(superclassList);
+            List<Class<?>> classList = findSuperclasses(theClass);
+            classList.add(0, theClass);
 
             for (Class<?> sc : classList) {
                 Optional<MetaMethod> optionalMetaMethod = getAccessibleMetaMethod(metaMethod, params, caller, sc);


[groovy] 01/18: Trivial refactoring: cleanup `CachedClass`

Posted by su...@apache.org.
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

commit 4dc126fdab673ac9d450a58933c02883bb2f214b
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Nov 3 20:49:23 2019 +0800

    Trivial refactoring: cleanup `CachedClass`
    
    (cherry picked from commit ea09b5119d62f1c6e73c11ec1cf730aa13efedd2)
---
 .../codehaus/groovy/reflection/CachedClass.java    | 60 ++++++++++------------
 1 file changed, 27 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 51c2083..9e26796 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -63,11 +63,9 @@ public class CachedClass {
         public CachedField[] initValue() {
             final Field[] declaredFields = AccessController.doPrivileged((PrivilegedAction<Field[]>) () -> {
                 Field[] df = getTheClass().getDeclaredFields();
-                df = Arrays.stream(df)
+                return Arrays.stream(df)
                         .filter(f -> checkCanSetAccessible(f, CachedClass.class))
                         .toArray(Field[]::new);
-//                    df = (Field[]) ReflectionUtils.makeAccessible(df);
-                return df;
             });
             CachedField[] fields = new CachedField[declaredFields.length];
             for (int i = 0; i != fields.length; ++i)
@@ -80,15 +78,12 @@ public class CachedClass {
         private static final long serialVersionUID = -5834446523983631635L;
 
         public CachedConstructor[] initValue() {
-            final Constructor[] declaredConstructors = (Constructor[])
-               AccessController.doPrivileged((PrivilegedAction<Constructor[]>) () -> {
-                   Constructor[] dc = getTheClass().getDeclaredConstructors();
-                   dc = Arrays.stream(dc)
-                           .filter(c -> checkCanSetAccessible(c, CachedClass.class))
-                           .toArray(Constructor[]::new);
-
-                   return dc;
-               });
+            final Constructor[] declaredConstructors = AccessController.doPrivileged((PrivilegedAction<Constructor[]>) () -> {
+                Constructor[] dc = getTheClass().getDeclaredConstructors();
+                return Arrays.stream(dc)
+                        .filter(c -> checkCanSetAccessible(c, CachedClass.class))
+                        .toArray(Constructor[]::new);
+            });
             CachedConstructor[] constructors = new CachedConstructor[declaredConstructors.length];
             for (int i = 0; i != constructors.length; ++i)
                 constructors[i] = new CachedConstructor(CachedClass.this, declaredConstructors[i]);
@@ -104,18 +99,16 @@ public class CachedClass {
             declaredMethods = AccessController.doPrivileged((PrivilegedAction<Method[]>) () -> {
                 try {
                     Method[] dm = getTheClass().getDeclaredMethods();
-                    dm = Arrays.stream(dm)
+                    return Arrays.stream(dm)
                             .filter(m -> checkCanSetAccessible(m, CachedClass.class))
                             .toArray(Method[]::new);
-//                           dm = (Method[]) ReflectionUtils.makeAccessible(dm);
-                    return dm;
                 } catch (Throwable e) {
                     // Typically, Android can throw ClassNotFoundException
                     return EMPTY_METHOD_ARRAY;
                 }
             });
-            List<CachedMethod> methods = new ArrayList<CachedMethod>(declaredMethods.length);
-            List<CachedMethod> mopMethods = new ArrayList<CachedMethod>(declaredMethods.length);
+            List<CachedMethod> methods = new ArrayList<>(declaredMethods.length);
+            List<CachedMethod> mopMethods = new ArrayList<>(declaredMethods.length);
             for (int i = 0; i != declaredMethods.length; ++i) {
                 final CachedMethod cachedMethod = new CachedMethod(CachedClass.this, declaredMethods[i]);
                 final String name = cachedMethod.getName();
@@ -175,7 +168,7 @@ public class CachedClass {
         private static final long serialVersionUID = 7166687623678851596L;
 
         public LinkedList<ClassInfo> initValue() {
-            Set<ClassInfo> res = new LinkedHashSet<ClassInfo> ();
+            Set<ClassInfo> res = new LinkedHashSet<>();
 
             res.add(classInfo);
 
@@ -189,7 +182,7 @@ public class CachedClass {
             if (isInterface)
               res.add(ReflectionCache.OBJECT_CLASS.classInfo);
 
-            return new LinkedList<ClassInfo> (res);
+            return new LinkedList<>(res);
         }
     };
 
@@ -204,7 +197,7 @@ public class CachedClass {
         private static final long serialVersionUID = 2139190436931329873L;
 
         public Set<CachedClass> initValue() {
-            Set<CachedClass> res = new HashSet<CachedClass> (0);
+            Set<CachedClass> res = new HashSet<>(0);
 
             Class[] classes = getTheClass().getInterfaces();
             for (Class cls : classes) {
@@ -218,7 +211,7 @@ public class CachedClass {
         private static final long serialVersionUID = 4060471819464086940L;
 
         public Set<CachedClass> initValue() {
-            Set<CachedClass> res = new HashSet<CachedClass> (0);
+            Set<CachedClass> res = new HashSet<>(0);
 
             if (getTheClass().isInterface())
               res.add(CachedClass.this);
@@ -308,12 +301,12 @@ public class CachedClass {
     public Object coerceArgument(Object argument) {
         return argument;
     }
-    
+
     public int getSuperClassDistance() {
-        if (distance>=0) return distance;
+        if (distance >= 0) return distance;
 
         int distance = 0;
-        for (Class klazz= getTheClass(); klazz != null; klazz = klazz.getSuperclass()) {
+        for (Class klazz = getTheClass(); klazz != null; klazz = klazz.getSuperclass()) {
             distance++;
         }
         this.distance = distance;
@@ -354,7 +347,7 @@ public class CachedClass {
     }
 
     public MetaMethod[] getNewMetaMethods() {
-        List<MetaMethod> arr = new ArrayList<MetaMethod>(Arrays.asList(classInfo.newMetaMethods));
+        List<MetaMethod> arr = new ArrayList<>(Arrays.asList(classInfo.newMetaMethods));
 
         final MetaClass metaClass = classInfo.getStrongMetaClass();
         if (metaClass instanceof ExpandoMetaClass) {
@@ -442,7 +435,7 @@ public class CachedClass {
         if (metaClass != null) {
           if (metaClass.getClass() == MetaClassImpl.class) {
               classInfo.setStrongMetaClass(null);
-              List<MetaMethod> res = new ArrayList<MetaMethod>();
+              List<MetaMethod> res = new ArrayList<>();
               Collections.addAll(res, classInfo.newMetaMethods);
               res.addAll(arr);
               updateSetNewMopMethods(res);
@@ -474,12 +467,12 @@ public class CachedClass {
     }
 
     private void updateAddNewMopMethods(List<MetaMethod> arr) {
-        List<MetaMethod> res = new ArrayList<MetaMethod>();
+        List<MetaMethod> res = new ArrayList<>();
         res.addAll(Arrays.asList(classInfo.newMetaMethods));
         res.addAll(arr);
         classInfo.newMetaMethods = res.toArray(MetaMethod.EMPTY_ARRAY);
         Class theClass = classInfo.getCachedClass().getTheClass();
-        if (theClass==Closure.class || theClass==Class.class) {
+        if (theClass == Closure.class || theClass == Class.class) {
             ClosureMetaClass.resetCachedMetaClasses();
         }
     }
@@ -500,11 +493,12 @@ public class CachedClass {
         return hierarchy.get();
     }
 
-    public static class CachedMethodComparatorByName implements Comparator {
+    public static class CachedMethodComparatorByName implements Comparator<CachedMethod> {
         public static final Comparator INSTANCE = new CachedMethodComparatorByName();
 
-        public int compare(Object o1, Object o2) {
-              return ((CachedMethod)o1).getName().compareTo(((CachedMethod)o2).getName());
+        @Override
+        public int compare(CachedMethod o1, CachedMethod o2) {
+            return o1.getName().compareTo(o2.getName());
         }
     }
 
@@ -513,9 +507,9 @@ public class CachedClass {
 
         public int compare(Object o1, Object o2) {
             if (o1 instanceof CachedMethod)
-              return ((CachedMethod)o1).getName().compareTo((String)o2);
+                return ((CachedMethod) o1).getName().compareTo((String) o2);
             else
-              return ((String)o1).compareTo(((CachedMethod)o2).getName());
+                return ((String) o1).compareTo(((CachedMethod) o2).getName());
         }
     }