Repository: groovy Updated Branches: refs/heads/master 8b99a30e0 -> 0d54b5357
minor refactor Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0d54b535 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0d54b535 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0d54b535 Branch: refs/heads/master Commit: 0d54b5357863d101eec47f20739d60913b3c869d Parents: 8b99a30 Author: paulk <[email protected]> Authored: Wed Sep 27 21:50:52 2017 +1000 Committer: paulk <[email protected]> Committed: Wed Sep 27 21:50:52 2017 +1000 ---------------------------------------------------------------------- .../stc/StaticTypeCheckingVisitor.java | 63 ++++++++++---------- 1 file changed, 33 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/0d54b535/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 9289fcd..9188b2d 100644 --- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -112,7 +112,7 @@ import static org.codehaus.groovy.syntax.Types.ASSIGNMENT_OPERATOR; import static org.codehaus.groovy.syntax.Types.COMPARE_EQUAL; import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_EQUAL; import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_IN; -import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_INSTANCEOF; +//import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_INSTANCEOF; import static org.codehaus.groovy.syntax.Types.COMPARE_TO; import static org.codehaus.groovy.syntax.Types.DIVIDE; import static org.codehaus.groovy.syntax.Types.DIVIDE_EQUAL; @@ -1947,40 +1947,43 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { protected ClassNode[] getArgumentTypes(ArgumentListExpression args) { List<Expression> arglist = args.getExpressions(); ClassNode[] ret = new ClassNode[arglist.size()]; - int i = 0; + for (int i = 0; i < arglist.size(); i++) { + Expression exp = arglist.get(i); + if (isNullConstant(exp)) { + ret[i] = UNKNOWN_PARAMETER_TYPE; + } else { + ret[i] = getInferredTypeFromTempInfo(exp, getType(exp)); + } + } + return ret; + } + + private ClassNode getInferredTypeFromTempInfo(Expression exp, ClassNode result) { Map<Object, List<ClassNode>> info = typeCheckingContext.temporaryIfBranchTypeInformation.empty() ? null : typeCheckingContext.temporaryIfBranchTypeInformation.peek(); - for (Expression exp : arglist) { - if (isNullConstant(exp)) { - ret[i] = UNKNOWN_PARAMETER_TYPE; - } else { - ret[i] = getType(exp); - if (exp instanceof VariableExpression && info != null) { - List<ClassNode> classNodes = getTemporaryTypesForExpression(exp); - if (classNodes != null && !classNodes.isEmpty()) { - ArrayList<ClassNode> arr = new ArrayList<ClassNode>(classNodes.size() + 1); - arr.add(ret[i]); - arr.addAll(classNodes); - // GROOVY-7333: filter out Object - Iterator<ClassNode> iterator = arr.iterator(); - while (iterator.hasNext()) { - ClassNode next = iterator.next(); - if (ClassHelper.OBJECT_TYPE.equals(next)) { - iterator.remove(); - } - } - if (arr.isEmpty()) { - ret[i] = ClassHelper.OBJECT_TYPE.getPlainNodeReference(); - } else if (arr.size()==1) { - ret[i] = arr.get(0); - } else { - ret[i] = new UnionTypeClassNode(arr.toArray(new ClassNode[arr.size()])); - } + if (exp instanceof VariableExpression && info != null) { + List<ClassNode> classNodes = getTemporaryTypesForExpression(exp); + if (classNodes != null && !classNodes.isEmpty()) { + ArrayList<ClassNode> arr = new ArrayList<ClassNode>(classNodes.size() + 1); + if (result != null) arr.add(result); + arr.addAll(classNodes); + // GROOVY-7333: filter out Object + Iterator<ClassNode> iterator = arr.iterator(); + while (iterator.hasNext()) { + ClassNode next = iterator.next(); + if (ClassHelper.OBJECT_TYPE.equals(next)) { + iterator.remove(); } } + if (arr.isEmpty()) { + result = ClassHelper.OBJECT_TYPE.getPlainNodeReference(); + } else if (arr.size()==1) { + result = arr.get(0); + } else { + result = new UnionTypeClassNode(arr.toArray(new ClassNode[arr.size()])); + } } - i++; } - return ret; + return result; } @Override
