You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2017/09/29 13:08:01 UTC
[2/3] groovy git commit: minor refactor
minor refactor
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/132f8ca1
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/132f8ca1
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/132f8ca1
Branch: refs/heads/GROOVY_2_4_X
Commit: 132f8ca1b8a460c53169d9eee3181c539825b947
Parents: b672fda
Author: paulk <pa...@asert.com.au>
Authored: Wed Sep 27 21:50:52 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Fri Sep 29 23:05:35 2017 +1000
----------------------------------------------------------------------
.../stc/StaticTypeCheckingVisitor.java | 61 ++++++++++----------
1 file changed, 32 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/132f8ca1/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 32c2818..f986d1b 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1949,40 +1949,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