From commits-return-6463-archive-asf-public=cust-asf.ponee.io@groovy.apache.org Thu May 10 13:22:20 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 3F1D318063A for ; Thu, 10 May 2018 13:22:20 +0200 (CEST) Received: (qmail 54000 invoked by uid 500); 10 May 2018 11:22:19 -0000 Mailing-List: contact commits-help@groovy.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.apache.org Delivered-To: mailing list commits@groovy.apache.org Received: (qmail 53991 invoked by uid 99); 10 May 2018 11:22:19 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 May 2018 11:22:19 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 48D6ADFF06; Thu, 10 May 2018 11:22:19 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sunlan@apache.org To: commits@groovy.apache.org Message-Id: <8b681bb99224439ba0e1dcdd82da1303@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: groovy git commit: Simplify finding generics implementation class Date: Thu, 10 May 2018 11:22:19 +0000 (UTC) Repository: groovy Updated Branches: refs/heads/GROOVY_2_5_X 96cf0803a -> 30881b506 Simplify finding generics implementation class (cherry picked from commit e7766ff) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/30881b50 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/30881b50 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/30881b50 Branch: refs/heads/GROOVY_2_5_X Commit: 30881b506758b14425f1e7697b03029bae5bc511 Parents: 96cf080 Author: sunlan Authored: Thu May 10 19:20:16 2018 +0800 Committer: sunlan Committed: Thu May 10 19:22:14 2018 +0800 ---------------------------------------------------------------------- .../stc/StaticTypeCheckingSupport.java | 28 +++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/30881b50/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 0897346..7b343bf 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -1209,29 +1209,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 makeDeclaringAndActualGenericsTypeMap(ClassNode declaringClassForDistance, ClassNode actualReceiverForDistance) { - GenericsType[] declaringGenericsTypes = declaringClassForDistance.getGenericsTypes(); - GenericsType[] actualGenericsTypes = actualReceiverForDistance.getGenericsTypes(); + private static Map makeDeclaringAndActualGenericsTypeMap(ClassNode declaringClass, ClassNode actualReceiver) { + GenericsType[] declaringGenericsTypes = declaringClass.getGenericsTypes(); + GenericsType[] actualGenericsTypes = actualReceiver.getGenericsTypes(); if (null == declaringGenericsTypes) { return Collections.emptyMap(); } if (null == actualGenericsTypes) { - List superClassAndInterfaceList = getAllSuperClassesAndInterfaces(actualReceiverForDistance); + List 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(); } @@ -1243,11 +1243,15 @@ public abstract class StaticTypeCheckingSupport { return result; } - private static List getAllSuperClassesAndInterfaces(ClassNode actualReceiverForDistance) { + private static boolean isGenericsTypeArraysLengthEqual(GenericsType[] declaringGenericsTypes, GenericsType[] actualGenericsTypes) { + return null != actualGenericsTypes && declaringGenericsTypes.length == actualGenericsTypes.length; + } + + private static List getAllSuperClassesAndInterfaces(ClassNode actualReceiver) { List superClassAndInterfaceList = new LinkedList<>(); - List allSuperClassNodeList = getAllUnresolvedSuperClasses(actualReceiverForDistance); + List allSuperClassNodeList = getAllUnresolvedSuperClasses(actualReceiver); superClassAndInterfaceList.addAll(allSuperClassNodeList); - superClassAndInterfaceList.addAll(actualReceiverForDistance.getAllInterfaces()); + superClassAndInterfaceList.addAll(actualReceiver.getAllInterfaces()); for (ClassNode superClassNode : allSuperClassNodeList) { superClassAndInterfaceList.addAll(superClassNode.getAllInterfaces()); @@ -1256,10 +1260,10 @@ public abstract class StaticTypeCheckingSupport { return superClassAndInterfaceList; } - private static List getAllUnresolvedSuperClasses(ClassNode actualReceiverForDistance) { + private static List getAllUnresolvedSuperClasses(ClassNode actualReceiver) { List 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); }