Repository: groovy Updated Branches: refs/heads/native-lambda 37dc84543 -> 9f51d3b3e
Refine STC of `call` method Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/9f51d3b3 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/9f51d3b3 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/9f51d3b3 Branch: refs/heads/native-lambda Commit: 9f51d3b3efa0c891b3bfba6ac23e684597caf6d3 Parents: 37dc845 Author: sunlan <sun...@apache.org> Authored: Wed Jan 31 17:47:02 2018 +0800 Committer: sunlan <sun...@apache.org> Committed: Wed Jan 31 17:47:02 2018 +0800 ---------------------------------------------------------------------- .../transform/stc/StaticTypeCheckingVisitor.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/9f51d3b3/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java ---------------------------------------------------------------------- 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 dcb3ab6..e9ccffd 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -281,13 +281,15 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { public static final MethodNode CLOSURE_CALL_ONE_ARG; public static final MethodNode CLOSURE_CALL_VARGS; + public static final String CALL = "call"; + static { // Cache closure call methods - CLOSURE_CALL_NO_ARG = CLOSURE_TYPE.getDeclaredMethod("call", Parameter.EMPTY_ARRAY); - CLOSURE_CALL_ONE_ARG = CLOSURE_TYPE.getDeclaredMethod("call", new Parameter[]{ + CLOSURE_CALL_NO_ARG = CLOSURE_TYPE.getDeclaredMethod(CALL, Parameter.EMPTY_ARRAY); + CLOSURE_CALL_ONE_ARG = CLOSURE_TYPE.getDeclaredMethod(CALL, new Parameter[]{ new Parameter(OBJECT_TYPE, "arg") }); - CLOSURE_CALL_VARGS = CLOSURE_TYPE.getDeclaredMethod("call", new Parameter[]{ + CLOSURE_CALL_VARGS = CLOSURE_TYPE.getDeclaredMethod(CALL, new Parameter[]{ new Parameter(OBJECT_TYPE.makeArray(), "args") }); } @@ -3404,7 +3406,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } protected boolean isClosureCall(final String name, final Expression objectExpression, final Expression arguments) { - if (objectExpression instanceof ClosureExpression && ("call".equals(name)||"doCall".equals(name))) return true; + if (objectExpression instanceof ClosureExpression && (CALL.equals(name)||"doCall".equals(name))) return true; if (objectExpression == VariableExpression.THIS_EXPRESSION) { FieldNode fieldNode = typeCheckingContext.getEnclosingClassNode().getDeclaredField(name); if (fieldNode != null) { @@ -3414,7 +3416,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } } } else { - if (!"call".equals(name) && !"doCall".equals(name)) return false; + if (!CALL.equals(name) && !"doCall".equals(name)) return false; } return (getType(objectExpression).equals(CLOSURE_TYPE)); } @@ -4119,9 +4121,9 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { collectAllInterfaceMethodsByName(receiver, name, methods); methods.addAll(OBJECT_TYPE.getMethods(name)); - if (ClassHelper.isSAMType(receiver)) { + if (CALL.equals(name) && ClassHelper.isSAMType(receiver)) { MethodNode sam = ClassHelper.findSAM(receiver); - MethodNode callMethodNode = new MethodNode("call", sam.getModifiers(), sam.getReturnType(), sam.getParameters(), sam.getExceptions(), sam.getCode()); + MethodNode callMethodNode = new MethodNode(CALL, sam.getModifiers(), sam.getReturnType(), sam.getParameters(), sam.getExceptions(), sam.getCode()); callMethodNode.setDeclaringClass(sam.getDeclaringClass()); callMethodNode.setSourcePosition(sam);