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 2018/05/10 11:20:22 UTC

groovy git commit: Simplify finding generics implementation class

Repository: groovy
Updated Branches:
  refs/heads/master 775706596 -> e7766ffad


Simplify finding generics implementation class


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

Branch: refs/heads/master
Commit: e7766ffad4a70377a2e80b2a797261b0cb197ed4
Parents: 7757065
Author: sunlan <su...@apache.org>
Authored: Thu May 10 19:20:16 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu May 10 19:20:16 2018 +0800

----------------------------------------------------------------------
 .../stc/StaticTypeCheckingSupport.java          | 28 +++++++++++---------
 1 file changed, 16 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e7766ffa/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
----------------------------------------------------------------------
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 6da4abc..fa924a6 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1215,29 +1215,29 @@ public abstract class StaticTypeCheckingSupport {
      * The resolved types can not help us to choose methods correctly if the argument is a string:  T: Object, S: Serializable
      * so we need actual types:  T: String, S: Long
      */
-    private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMap(ClassNode declaringClassForDistance, ClassNode actualReceiverForDistance) {
-        GenericsType[] declaringGenericsTypes = declaringClassForDistance.getGenericsTypes();
-        GenericsType[] actualGenericsTypes = actualReceiverForDistance.getGenericsTypes();
+    private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMap(ClassNode declaringClass, ClassNode actualReceiver) {
+        GenericsType[] declaringGenericsTypes = declaringClass.getGenericsTypes();
+        GenericsType[] actualGenericsTypes = actualReceiver.getGenericsTypes();
 
         if (null == declaringGenericsTypes) {
             return Collections.emptyMap();
         }
 
         if (null == actualGenericsTypes) {
-            List<ClassNode> superClassAndInterfaceList = getAllSuperClassesAndInterfaces(actualReceiverForDistance);
+            List<ClassNode> superClassAndInterfaceList = getAllSuperClassesAndInterfaces(actualReceiver);
 
             for (ClassNode cn : superClassAndInterfaceList) {
-                if (cn.isDerivedFrom(declaringClassForDistance)) {
+                if (declaringClass.equals(cn.redirect())) {
                     actualGenericsTypes = cn.getGenericsTypes();
 
-                    if (null != actualGenericsTypes && declaringGenericsTypes.length == actualGenericsTypes.length) {
+                    if (isGenericsTypeArraysLengthEqual(declaringGenericsTypes, actualGenericsTypes)) {
                         break;
                     }
                 }
             }
         }
 
-        if (null == actualGenericsTypes || declaringGenericsTypes.length != actualGenericsTypes.length) {
+        if (!isGenericsTypeArraysLengthEqual(declaringGenericsTypes, actualGenericsTypes)) {
             return Collections.emptyMap();
         }
 
@@ -1249,11 +1249,15 @@ public abstract class StaticTypeCheckingSupport {
         return result;
     }
 
-    private static List<ClassNode> getAllSuperClassesAndInterfaces(ClassNode actualReceiverForDistance) {
+    private static boolean isGenericsTypeArraysLengthEqual(GenericsType[] declaringGenericsTypes, GenericsType[] actualGenericsTypes) {
+        return null != actualGenericsTypes && declaringGenericsTypes.length == actualGenericsTypes.length;
+    }
+
+    private static List<ClassNode> getAllSuperClassesAndInterfaces(ClassNode actualReceiver) {
         List<ClassNode> superClassAndInterfaceList = new LinkedList<>();
-        List<ClassNode> allSuperClassNodeList = getAllUnresolvedSuperClasses(actualReceiverForDistance);
+        List<ClassNode> allSuperClassNodeList = getAllUnresolvedSuperClasses(actualReceiver);
         superClassAndInterfaceList.addAll(allSuperClassNodeList);
-        superClassAndInterfaceList.addAll(actualReceiverForDistance.getAllInterfaces());
+        superClassAndInterfaceList.addAll(actualReceiver.getAllInterfaces());
 
         for (ClassNode superClassNode : allSuperClassNodeList) {
             superClassAndInterfaceList.addAll(superClassNode.getAllInterfaces());
@@ -1262,10 +1266,10 @@ public abstract class StaticTypeCheckingSupport {
         return superClassAndInterfaceList;
     }
 
-    private static List<ClassNode> getAllUnresolvedSuperClasses(ClassNode actualReceiverForDistance) {
+    private static List<ClassNode> getAllUnresolvedSuperClasses(ClassNode actualReceiver) {
         List<ClassNode> superClassNodeList = new LinkedList<>();
 
-        for (ClassNode cn = actualReceiverForDistance.getUnresolvedSuperClass(); null != cn && ClassHelper.OBJECT_TYPE != cn; cn = cn.getUnresolvedSuperClass()) {
+        for (ClassNode cn = actualReceiver.getUnresolvedSuperClass(); null != cn && ClassHelper.OBJECT_TYPE != cn; cn = cn.getUnresolvedSuperClass()) {
             superClassNodeList.add(cn);
         }