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/02/02 09:23:57 UTC
groovy git commit: GROOVY-8445: Static analysis does not work
properly when coercing Closure to FunctionInterface
Repository: groovy
Updated Branches:
refs/heads/master 7c1fa7e54 -> 1594c1b4c
GROOVY-8445: Static analysis does not work properly when coercing Closure to FunctionInterface
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/1594c1b4
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/1594c1b4
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/1594c1b4
Branch: refs/heads/master
Commit: 1594c1b4c9efb0610768e1346b453d1344b0e6b8
Parents: 7c1fa7e
Author: sunlan <su...@apache.org>
Authored: Fri Feb 2 17:23:50 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Feb 2 17:23:50 2018 +0800
----------------------------------------------------------------------
src/main/java/org/codehaus/groovy/ast/ClassHelper.java | 9 ++++++++-
.../java/org/codehaus/groovy/ast/tools/GenericsUtils.java | 7 +++++++
.../groovy/transform/stc/StaticTypeCheckingSupport.java | 8 ++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/1594c1b4/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
index 60eaa47..98a1ba2 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
@@ -399,7 +399,14 @@ public class ClassHelper {
public static MethodNode findSAM(ClassNode type) {
if (!Modifier.isAbstract(type.getModifiers())) return null;
if (type.isInterface()) {
- List<MethodNode> methods = type.getMethods();
+ List<MethodNode> methods;
+ if (type.isInterface()) {
+ // e.g. BinaryOperator extends BiFunction, BinaryOperator contains no abstract method, but it is really a SAM
+ methods = type.redirect().getAllDeclaredMethods();
+ } else {
+ methods = type.getMethods();
+ }
+
MethodNode found = null;
for (MethodNode mi : methods) {
// ignore methods, that are not abstract and from Object
http://git-wip-us.apache.org/repos/asf/groovy/blob/1594c1b4/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
index 653f327..a7cf7c0 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
@@ -444,6 +444,13 @@ public class GenericsUtils {
// have first to find matching super class or interface
Map <String,ClassNode> genSpec = createGenericsSpec(type);
ClassNode superClass = ClassHelper.getNextSuperClass(type,target);
+
+ if (superClass == null) {
+ if (ClassHelper.isPrimitiveType(type)) {
+ superClass = ClassHelper.getNextSuperClass(ClassHelper.getWrapper(type), target);
+ }
+ }
+
if (superClass!=null){
ClassNode corrected = GenericsUtils.correctToGenericsSpecRecurse(genSpec, superClass);
extractSuperClassGenerics(corrected, target, spec);
http://git-wip-us.apache.org/repos/asf/groovy/blob/1594c1b4/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 f83e32c..126cc41 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -20,6 +20,7 @@
package org.codehaus.groovy.transform.stc;
import org.codehaus.groovy.GroovyBugError;
+import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.GenericsType;
import org.codehaus.groovy.ast.MethodNode;
@@ -1768,6 +1769,13 @@ public abstract class StaticTypeCheckingSupport {
// have first to find matching super class or interface
Map <String,ClassNode> genSpec = GenericsUtils.createGenericsSpec(type);
ClassNode superClass = getNextSuperClass(type,target);
+
+ if (superClass == null) {
+ if (ClassHelper.isPrimitiveType(type)) {
+ superClass = ClassHelper.getNextSuperClass(ClassHelper.getWrapper(type), target);
+ }
+ }
+
if (superClass!=null){
ClassNode corrected;
if (missesGenericsTypes(type)) {