minor refactor

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

Branch: refs/heads/GROOVY_2_4_X
Commit: 036c14fa0ecc883ccc3b931aef40a666e374ed22
Parents: df63a38
Author: paulk <pa...@asert.com.au>
Authored: Wed Jun 1 13:35:39 2016 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Wed Jun 1 13:47:09 2016 +1000

----------------------------------------------------------------------
 src/main/org/codehaus/groovy/ast/ClassNode.java | 45 ++++++++------------
 .../groovy/ast/tools/ClassNodeUtils.java        | 41 ++++++++++++++++++
 .../groovy/ast/tools/ParameterUtils.java        | 39 +++++++++++++++++
 .../classgen/ClassCompletionVerifier.java       |  3 +-
 .../groovy/classgen/ExtendedVerifier.java       | 19 +--------
 .../classgen/asm/OptimizingStatementWriter.java | 18 +-------
 6 files changed, 103 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/ast/ClassNode.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/ClassNode.java 
b/src/main/org/codehaus/groovy/ast/ClassNode.java
index faf4570..6306f5f 100644
--- a/src/main/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/org/codehaus/groovy/ast/ClassNode.java
@@ -24,9 +24,11 @@ import org.codehaus.groovy.ast.expr.Expression;
 import org.codehaus.groovy.ast.expr.FieldExpression;
 import org.codehaus.groovy.ast.expr.MapExpression;
 import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.ast.stmt.BlockStatement;
 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
+import org.codehaus.groovy.ast.tools.ClassNodeUtils;
+import org.codehaus.groovy.ast.tools.ParameterUtils;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.transform.ASTTransformation;
 import org.codehaus.groovy.transform.GroovyASTTransformation;
@@ -34,8 +36,18 @@ import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.Opcodes;
 
 import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Represents a class in the AST.
@@ -435,7 +447,7 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
         } else {
             result = new HashMap<String, MethodNode>();
         }
-        addInterfaceMethods(result);
+        ClassNodeUtils.addInterfaceMethods(this, result);
 
         // And add in the methods implemented in this class.
         for (MethodNode method : getMethods()) {
@@ -445,19 +457,6 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
         return result;
     }
 
-    public void addInterfaceMethods(Map<String, MethodNode> methodsMap) {
-        // add in unimplemented abstract methods from the interfaces
-        for (ClassNode iface : getInterfaces()) {
-            Map<String, MethodNode> ifaceMethodsMap = 
iface.getDeclaredMethodsMap();
-            for (String methSig : ifaceMethodsMap.keySet()) {
-                if (!methodsMap.containsKey(methSig)) {
-                    MethodNode methNode = ifaceMethodsMap.get(methSig);
-                    methodsMap.put(methSig, methNode);
-                }
-            }
-        }
-    }
-
     public String getName() {
         return redirect().name;
     }
@@ -1039,17 +1038,7 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
      * @return true if the two arrays are of the same size and have the same 
contents
      */
     protected boolean parametersEqual(Parameter[] a, Parameter[] b) {
-        if (a.length == b.length) {
-            boolean answer = true;
-            for (int i = 0; i < a.length; i++) {
-                if (!a[i].getType().equals(b[i].getType())) {
-                    answer = false;
-                    break;
-                }
-            }
-            return answer;
-        }
-        return false;
+        return ParameterUtils.parametersEqual(a, b);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/ast/tools/ClassNodeUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/tools/ClassNodeUtils.java 
b/src/main/org/codehaus/groovy/ast/tools/ClassNodeUtils.java
new file mode 100644
index 0000000..f3eec90
--- /dev/null
+++ b/src/main/org/codehaus/groovy/ast/tools/ClassNodeUtils.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.codehaus.groovy.ast.tools;
+
+import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.MethodNode;
+
+import java.util.Map;
+
+public class ClassNodeUtils {
+    public static void addInterfaceMethods(ClassNode cnode, Map<String, 
MethodNode> methodsMap) {
+        // add in unimplemented abstract methods from the interfaces
+        for (ClassNode iface : cnode.getInterfaces()) {
+            Map<String, MethodNode> ifaceMethodsMap = 
iface.getDeclaredMethodsMap();
+            for (String methSig : ifaceMethodsMap.keySet()) {
+                if (!methodsMap.containsKey(methSig)) {
+                    MethodNode methNode = ifaceMethodsMap.get(methSig);
+                    methodsMap.put(methSig, methNode);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/ast/tools/ParameterUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/tools/ParameterUtils.java 
b/src/main/org/codehaus/groovy/ast/tools/ParameterUtils.java
new file mode 100644
index 0000000..4edf92e
--- /dev/null
+++ b/src/main/org/codehaus/groovy/ast/tools/ParameterUtils.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.codehaus.groovy.ast.tools;
+
+import org.codehaus.groovy.ast.Parameter;
+
+public class ParameterUtils {
+    public static boolean parametersEqual(Parameter[] a, Parameter[] b) {
+        if (a.length == b.length) {
+            boolean answer = true;
+            for (int i = 0; i < a.length; i++) {
+                if (!a[i].getType().equals(b[i].getType())) {
+                    answer = false;
+                    break;
+                }
+            }
+            return answer;
+        }
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java 
b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index c29c705..9fe13cf 100644
--- a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -35,6 +35,7 @@ import org.codehaus.groovy.ast.expr.PropertyExpression;
 import org.codehaus.groovy.ast.expr.TupleExpression;
 import org.codehaus.groovy.ast.expr.VariableExpression;
 import org.codehaus.groovy.ast.stmt.CatchStatement;
+import org.codehaus.groovy.ast.tools.ClassNodeUtils;
 import org.codehaus.groovy.ast.tools.GeneralUtils;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.runtime.MetaClassHelper;
@@ -93,7 +94,7 @@ public class ClassCompletionVerifier extends 
ClassCodeVisitorSupport {
             result = new HashMap<String, MethodNode>();
         }
         // add in unimplemented abstract methods from the interfaces
-        node.addInterfaceMethods(result);
+        ClassNodeUtils.addInterfaceMethods(node, result);
         for (MethodNode methodNode : node.getMethods()) {
             MethodNode mn = result.get(methodNode.getTypeDescriptor());
             if (mn != null && (mn.isStatic() ^ methodNode.isStatic()) && 
!methodNode.isStaticConstructor()) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java 
b/src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java
index 14697e6..611c67c 100644
--- a/src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java
+++ b/src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java
@@ -22,6 +22,7 @@ import org.codehaus.groovy.ast.*;
 import org.codehaus.groovy.ast.expr.DeclarationExpression;
 import org.codehaus.groovy.ast.stmt.ReturnStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.ast.tools.ParameterUtils;
 import org.codehaus.groovy.control.AnnotationConstantsVisitor;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.ErrorCollector;
@@ -46,8 +47,6 @@ import static 
org.codehaus.groovy.ast.tools.GenericsUtils.createGenericsSpec;
  * <p>
  * Current limitations:
  * - annotations on local variables are not supported
- *
- * @author <a href='mailto:the[dot]mindstorm[at]gmail[dot]com'>Alex Popescu</a>
  */
 public class ExtendedVerifier extends ClassCodeVisitorSupport {
     public static final String JVM_ERROR_MESSAGE = "Please make sure you are 
running on a JVM >= 1.5";
@@ -234,27 +233,13 @@ public class ExtendedVerifier extends 
ClassCodeVisitorSupport {
     private static MethodNode getDeclaredMethodCorrected(Map genericsSpec, 
MethodNode mn, ClassNode correctedNext) {
         for (MethodNode orig :  
correctedNext.getDeclaredMethods(mn.getName())) {
             MethodNode method = correctToGenericsSpec(genericsSpec, orig);
-            if (parametersEqual(method.getParameters(), mn.getParameters())) {
+            if (ParameterUtils.parametersEqual(method.getParameters(), 
mn.getParameters())) {
                 return method;
             }
         }
         return null;
     }
 
-    private static boolean parametersEqual(Parameter[] a, Parameter[] b) {
-        if (a.length == b.length) {
-            boolean answer = true;
-            for (int i = 0; i < a.length; i++) {
-                if (!a[i].getType().equals(b[i].getType())) {
-                    answer = false;
-                    break;
-                }
-            }
-            return answer;
-        }
-        return false;
-    }
-
     /**
      * Resolve metadata and details of the annotation.
      *

http://git-wip-us.apache.org/repos/asf/groovy/blob/036c14fa/src/main/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java 
b/src/main/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
index 104eb1f..9e660fa 100644
--- a/src/main/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
@@ -25,6 +25,7 @@ import org.codehaus.groovy.ast.*;
 import org.codehaus.groovy.ast.expr.*;
 import org.codehaus.groovy.ast.stmt.*;
 import org.codehaus.groovy.GroovyBugError;
+import org.codehaus.groovy.ast.tools.ParameterUtils;
 import org.codehaus.groovy.classgen.AsmClassGenerator;
 import org.codehaus.groovy.classgen.Verifier;
 import org.codehaus.groovy.control.SourceUnit;
@@ -40,7 +41,6 @@ import static 
org.codehaus.groovy.ast.tools.WideningCategories.*;
 
 /**
  * A class to write out the optimized statements
- * @author <a href="mailto:blackd...@gmx.org";>Jochen "blackdrag" Theodorou</a>
  */
 public class OptimizingStatementWriter extends StatementWriter {
     
@@ -850,7 +850,7 @@ public class OptimizingStatementWriter extends 
StatementWriter {
             List<ConstructorNode> cl = node.getDeclaredConstructors();
             MethodNode res = null;
             for (ConstructorNode cn : cl) {
-                if (parametersEqual(cn.getParameters(), paraTypes)) {
+                if (ParameterUtils.parametersEqual(cn.getParameters(), 
paraTypes)) {
                     res = cn;
                     break;
                 }
@@ -859,20 +859,6 @@ public class OptimizingStatementWriter extends 
StatementWriter {
             return null;
         }
 
-        private static boolean parametersEqual(Parameter[] a, Parameter[] b) {
-            if (a.length == b.length) {
-                boolean answer = true;
-                for (int i = 0; i < a.length; i++) {
-                    if (!a[i].getType().equals(b[i].getType())) {
-                        answer = false;
-                        break;
-                    }
-                }
-                return answer;
-            }
-            return false;
-        }
-        
         private static boolean validTypeForCall(ClassNode type) {
             // do call only for final classes and primitive types
             if (isPrimitiveType(type)) return true;

Reply via email to