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