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:09:00 UTC

[1/3] groovy git commit: minor refactor

Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X faeca1600 -> d3baea9ac


minor refactor


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/dbf8e71d
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/dbf8e71d
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/dbf8e71d

Branch: refs/heads/GROOVY_2_6_X
Commit: dbf8e71ddc8fda325a936a4537ed0ee5570aba27
Parents: faeca16
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 22:44:06 2017 +1000

----------------------------------------------------------------------
 .../stc/StaticTypeCheckingVisitor.java          | 63 ++++++++++----------
 1 file changed, 33 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/dbf8e71d/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 d5e4080..aec399c 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;
@@ -1973,40 +1973,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


[2/3] groovy git commit: minor refactor

Posted by pa...@apache.org.
minor refactor


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/42e3cedb
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/42e3cedb
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/42e3cedb

Branch: refs/heads/GROOVY_2_6_X
Commit: 42e3cedb0d77549934233ee669bea7b0d9cf80f6
Parents: dbf8e71
Author: paulk <pa...@asert.com.au>
Authored: Wed Sep 27 22:01:49 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Fri Sep 29 22:44:07 2017 +1000

----------------------------------------------------------------------
 .../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/42e3cedb/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 aec399c..d4711cc 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1990,7 +1990,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
             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);
+                if (result != null && !classNodes.contains(result)) arr.add(result);
                 arr.addAll(classNodes);
                 // GROOVY-7333: filter out Object
                 Iterator<ClassNode> iterator = arr.iterator();


[3/3] groovy git commit: Revert "GROOVY-8260: Static compilation requires casting inside instanceof check (handle additional cases)"

Posted by pa...@apache.org.
Revert "GROOVY-8260: Static compilation requires casting inside instanceof check (handle additional cases)"

This reverts commit faeca16008f1ebdccd664a6daea037f603bc9a60.


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d3baea9a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d3baea9a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d3baea9a

Branch: refs/heads/GROOVY_2_6_X
Commit: d3baea9ac9827e44472b2e1b3da53ba3c62527b5
Parents: 42e3ced
Author: paulk <pa...@asert.com.au>
Authored: Fri Sep 29 23:08:46 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Fri Sep 29 23:08:46 2017 +1000

----------------------------------------------------------------------
 .../stc/StaticTypeCheckingVisitor.java          | 51 ++--------------
 .../groovy/transform/stc/MiscSTCTest.groovy     | 63 +-------------------
 2 files changed, 9 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/d3baea9a/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 d4711cc..1eed9fc 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -480,30 +480,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
             }
         }
 
-        if (!(vexp.getAccessedVariable() instanceof DynamicVariable)) {
-            VariableExpression variable = null;
-            if (vexp.getAccessedVariable() instanceof Parameter) {
-                variable = new ParameterVariableExpression((Parameter) vexp.getAccessedVariable());
-            } else if (vexp.getAccessedVariable() instanceof VariableExpression) {
-                variable = (VariableExpression) vexp.getAccessedVariable();
-            }
-            if (variable != null) {
-                ClassNode inferredType = getInferredTypeFromTempInfo(variable, variable.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE));
-                if (inferredType != null && !inferredType.getName().equals("java.lang.Object")) {
-                    if (typeCheckingContext.getEnclosingBinaryExpression() != null) {
-                        // TODO narrow this down to assignment
-                        if (typeCheckingContext.getEnclosingBinaryExpression().getRightExpression() == vexp) {
-                            vexp.putNodeMetaData(StaticTypesMarker.INFERRED_TYPE, inferredType);
-                        }
-                    } else {
-                        // stash away type info that will be lost later to handle case
-                        // where this expression has return added later - piggy back on existing key
-                        vexp.putNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE, inferredType);
-                    }
-                }
-            }
-            return;
-        }
+        if (! (vexp.getAccessedVariable() instanceof DynamicVariable)) return;
 
         // a dynamic variable is either an undeclared variable
         // or a member of a class used in a 'with'
@@ -1856,9 +1833,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         if (typeCheckingContext.getEnclosingClosure()!=null) {
             return type;
         }
-        if ((expression instanceof VariableExpression) && hasInferredReturnType(expression)) {
-            type = expression.getNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE);
-        }
         MethodNode enclosingMethod = typeCheckingContext.getEnclosingMethod();
         if (enclosingMethod != null && typeCheckingContext.getEnclosingClosure()==null) {
             if (!enclosingMethod.isVoidMethod()
@@ -3231,9 +3205,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         int depth = typeCheckingContext.temporaryIfBranchTypeInformation.size();
         while (classNodes == null && depth > 0) {
             final Map<Object, List<ClassNode>> tempo = typeCheckingContext.temporaryIfBranchTypeInformation.get(--depth);
-            Object key = objectExpression instanceof ParameterVariableExpression
-                    ? ((ParameterVariableExpression) objectExpression).parameter
-                    : extractTemporaryTypeInfoKey(objectExpression);
+            Object key = extractTemporaryTypeInfoKey(objectExpression);
             classNodes = tempo.get(key);
         }
         return classNodes;
@@ -3421,14 +3393,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         typeCheckingContext.popTemporaryTypeInfo();
         falseExpression.visit(this);
         ClassNode resultType;
-        ClassNode typeOfFalse = getType(falseExpression);
-        ClassNode typeOfTrue = getType(trueExpression);
-        if (hasInferredReturnType(falseExpression)) {
-            typeOfFalse = falseExpression.getNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE);
-        }
-        if (hasInferredReturnType(trueExpression)) {
-            typeOfTrue = trueExpression.getNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE);
-        }
         if (isNullConstant(trueExpression) || isNullConstant(falseExpression)) {
             BinaryExpression enclosingBinaryExpression = typeCheckingContext.getEnclosingBinaryExpression();
             if (enclosingBinaryExpression != null && enclosingBinaryExpression.getRightExpression()==expression) {
@@ -3436,23 +3400,20 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
             } else if (isNullConstant(trueExpression) && isNullConstant(falseExpression)) {
                 resultType = OBJECT_TYPE;
             } else if (isNullConstant(trueExpression)) {
-                resultType = wrapTypeIfNecessary(typeOfFalse);
+                resultType = wrapTypeIfNecessary(getType(falseExpression));
             } else {
-                resultType = wrapTypeIfNecessary(typeOfTrue);
+                resultType = wrapTypeIfNecessary(getType(trueExpression));
             }
         } else {
             // store type information
+            final ClassNode typeOfTrue = getType(trueExpression);
+            final ClassNode typeOfFalse = getType(falseExpression);
             resultType = lowestUpperBound(typeOfTrue, typeOfFalse);
         }
         storeType(expression, resultType);
         popAssignmentTracking(oldTracker);
     }
 
-    private boolean hasInferredReturnType(Expression expression) {
-        ClassNode type = expression.getNodeMetaData(StaticTypesMarker.INFERRED_RETURN_TYPE);
-        return type != null && !type.getName().equals("java.lang.Object");
-    }
-
     @Override
     public void visitTryCatchFinally(final TryCatchStatement statement) {
         final List<CatchStatement> catchStatements = statement.getCatchStatements();

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3baea9a/src/test/groovy/transform/stc/MiscSTCTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/MiscSTCTest.groovy b/src/test/groovy/transform/stc/MiscSTCTest.groovy
index fadac0a..13bdb40 100644
--- a/src/test/groovy/transform/stc/MiscSTCTest.groovy
+++ b/src/test/groovy/transform/stc/MiscSTCTest.groovy
@@ -22,6 +22,8 @@ import org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor
 
 /**
  * Unit tests for static type checking : miscellaneous tests.
+ *
+ * @author Cedric Champeau
  */
 class MiscSTCTest extends StaticTypeCheckingTestCase {
 
@@ -270,67 +272,8 @@ class MiscSTCTest extends StaticTypeCheckingTestCase {
         }
     }
 
-    static class MiscSTCTestSupport {
+    public static class MiscSTCTestSupport {
         static def foo() { '123' }
     }
-
-    void testTernaryParam() {
-        assertScript '''
-            Date ternaryParam(Object input) {
-                input instanceof Date ? input : null
-            }
-            def d = new Date()
-            assert ternaryParam(42) == null
-            assert ternaryParam('foo') == null
-            assert ternaryParam(d) == d
-        '''
-    }
-
-    void testTernaryLocalVar() {
-        assertScript '''
-            Date ternaryLocalVar(Object input) {
-                Object copy = input
-                copy instanceof Date ? copy : null
-            }
-            def d = new Date()
-            assert ternaryLocalVar(42) == null
-            assert ternaryLocalVar('foo') == null
-            assert ternaryLocalVar(d) == d
-        '''
-    }
-
-    void testIfThenElseParam() {
-        assertScript '''
-            Date ifThenElseParam(Object input) {
-                if (input instanceof Date) {
-                    input
-                } else {
-                    null
-                }
-            }
-            def d = new Date()
-            assert ifThenElseParam(42) == null
-            assert ifThenElseParam('foo') == null
-            assert ifThenElseParam(d) == d
-        '''
-    }
-
-    void testIfThenElseLocalVar() {
-        assertScript '''
-            Date ifThenElseLocalVar(Object input) {
-                Date result
-                if (input instanceof Date) {
-                    result = input
-                } else {
-                    result = null
-                }
-                result
-            }
-            def d = new Date()
-            assert ifThenElseLocalVar(42) == null
-            assert ifThenElseLocalVar('foo') == null
-            assert ifThenElseLocalVar(d) == d
-        '''
-    }
 }