You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2019/12/22 19:31:05 UTC

[groovy] branch master updated (130adb7 -> 7f1ef57)

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

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


    from 130adb7  Update javadoc
     new d443bb0  add wildcard support to isUsingUncheckedGenerics and missesGenericsTypes
     new 7f1ef57  remove repeat call to findSAM(ClassNode)

The 2 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:
 .../transform/stc/StaticTypeCheckingSupport.java   | 34 ++++++++++++++--------
 .../transform/stc/StaticTypeCheckingVisitor.java   | 10 ++++---
 2 files changed, 28 insertions(+), 16 deletions(-)


[groovy] 01/02: add wildcard support to isUsingUncheckedGenerics and missesGenericsTypes

Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit d443bb0cc9b1087aa9f8c23b8d799faf7446df37
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Dec 22 13:14:09 2019 -0600

    add wildcard support to isUsingUncheckedGenerics and missesGenericsTypes
---
 .../transform/stc/StaticTypeCheckingSupport.java   | 34 ++++++++++++++--------
 1 file changed, 22 insertions(+), 12 deletions(-)

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 0184a83..5f2e6a6 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1007,21 +1007,22 @@ public abstract class StaticTypeCheckingSupport {
      */
     public static boolean isUsingUncheckedGenerics(final ClassNode node) {
         if (node.isArray()) return isUsingUncheckedGenerics(node.getComponentType());
-        if (node.isUsingGenerics()) {
-            GenericsType[] genericsTypes = node.getGenericsTypes();
-            if (genericsTypes != null) {
-                for (GenericsType genericsType : genericsTypes) {
-                    if (genericsType.isPlaceholder()) {
-                        return true;
-                    } else {
-                        if (isUsingUncheckedGenerics(genericsType.getType())) {
-                            return true;
-                        }
+        GenericsType[] genericsTypes = node.getGenericsTypes();
+        if (genericsTypes != null) {
+            for (GenericsType genericsType : genericsTypes) {
+                if (genericsType.isPlaceholder()) return true;
+                if (genericsType.isWildcard()) {
+                    ClassNode lowerBound = genericsType.getLowerBound();
+                    ClassNode[] upperBounds = genericsType.getUpperBounds();
+                    if (lowerBound != null) {
+                        if (lowerBound.isGenericsPlaceHolder() || isUsingUncheckedGenerics(lowerBound)) return true;
+                    } else if (upperBounds != null) {
+                        if (upperBounds[0].isGenericsPlaceHolder() || isUsingUncheckedGenerics(upperBounds[0])) return true;
                     }
+                } else {
+                    if (isUsingUncheckedGenerics(genericsType.getType())) return true;
                 }
             }
-        } else {
-            return false;
         }
         return false;
     }
@@ -2146,6 +2147,15 @@ public abstract class StaticTypeCheckingSupport {
         if (cnTypes != null) {
             for (GenericsType genericsType : cnTypes) {
                 if (genericsType.isPlaceholder()) return true;
+                if (genericsType.isWildcard()) {
+                    ClassNode lowerBound = genericsType.getLowerBound();
+                    ClassNode[] upperBounds = genericsType.getUpperBounds();
+                    if (lowerBound != null) {
+                        if (lowerBound.isGenericsPlaceHolder() || missesGenericsTypes(lowerBound)) return true;
+                    } else if (upperBounds != null) {
+                        if (upperBounds[0].isGenericsPlaceHolder() || missesGenericsTypes(upperBounds[0])) return true;
+                    }
+                }
             }
         }
         return false;


[groovy] 02/02: remove repeat call to findSAM(ClassNode)

Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 7f1ef57ff967441cc98c1c1ff925aaf4f7979626
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Dec 22 13:17:49 2019 -0600

    remove repeat call to findSAM(ClassNode)
---
 .../groovy/transform/stc/StaticTypeCheckingVisitor.java        | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

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 fea37f6..4abb7f3 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -4166,17 +4166,19 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         Expression leftExpression = expr.getLeftExpression();
         Expression rightExpression = expr.getRightExpression();
 
-        if (op == ASSIGN || op == ASSIGNMENT_OPERATOR || op == ELVIS_EQUAL) {
-            if (rightRedirect.isDerivedFrom(CLOSURE_TYPE) && isSAMType(leftRedirect)) {
+        if (op == EQUAL || op == ELVIS_EQUAL) {
+            if (rightRedirect.isDerivedFrom(CLOSURE_TYPE)) {
                 ClosureExpression closureExpression = null;
                 if (rightExpression instanceof ClosureExpression) {
                     closureExpression = (ClosureExpression) rightExpression;
                 } else if (rightExpression instanceof MethodReferenceExpression) {
                     closureExpression = rightExpression.getNodeMetaData(CONSTRUCTED_LAMBDA_EXPRESSION);
                 }
-
                 if (closureExpression != null) {
-                    return inferSAMTypeGenericsInAssignment(left, findSAM(left), right, closureExpression);
+                    MethodNode abstractMethod = findSAM(left);
+                    if (abstractMethod != null) {
+                        return inferSAMTypeGenericsInAssignment(left, abstractMethod, right, closureExpression);
+                    }
                 }
             }