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 2018/11/24 04:45:09 UTC

[1/2] groovy git commit: GROOVY-8882: CS: Loop over elements of String has different element type (closes #827)

Repository: groovy
Updated Branches:
  refs/heads/master 43c75a23f -> 95f692dc4


GROOVY-8882: CS: Loop over elements of String has different element type (closes #827)


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

Branch: refs/heads/master
Commit: 5d4a951bb653bb1a7c8570d28246396eaa3e0713
Parents: 43c75a2
Author: Paul King <pa...@asert.com.au>
Authored: Wed Nov 21 14:35:36 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Sat Nov 24 14:41:18 2018 +1000

----------------------------------------------------------------------
 .../transform/sc/StaticCompilationVisitor.java    | 11 ++++++++++-
 .../transform/stc/StaticTypeCheckingVisitor.java  | 10 ++++++++--
 src/test/groovy/transform/stc/LoopsSTCTest.groovy | 18 ++++++++++++++++++
 3 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5d4a951b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
index f66b24a..036dbe5 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
@@ -72,6 +72,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static org.codehaus.groovy.ast.ClassHelper.Character_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.STRING_TYPE;
 import static org.codehaus.groovy.ast.tools.GenericsUtils.addMethodGenerics;
 import static org.codehaus.groovy.ast.tools.GenericsUtils.applyGenericsContextToPlaceHolders;
 import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse;
@@ -440,7 +442,14 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
         Expression collectionExpression = forLoop.getCollectionExpression();
         if (!(collectionExpression instanceof ClosureListExpression)) {
             final ClassNode collectionType = getType(forLoop.getCollectionExpression());
-            ClassNode componentType = inferLoopElementType(collectionType);
+            ClassNode forLoopVariableType = forLoop.getVariableType();
+            ClassNode componentType;
+            if (Character_TYPE.equals(ClassHelper.getWrapper(forLoopVariableType)) && STRING_TYPE.equals(collectionType)) {
+                // we allow auto-coercion here
+                componentType = forLoopVariableType;
+            } else {
+                componentType = inferLoopElementType(collectionType);
+            }
             forLoop.getVariable().setType(componentType);
             forLoop.getVariable().setOriginType(componentType);
         }

http://git-wip-us.apache.org/repos/asf/groovy/blob/5d4a951b/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 de2abff..12a48d3 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1886,8 +1886,14 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         } else {
             collectionExpression.visit(this);
             final ClassNode collectionType = getType(collectionExpression);
-            ClassNode componentType = inferLoopElementType(collectionType);
             ClassNode forLoopVariableType = forLoop.getVariableType();
+            ClassNode componentType;
+            if (Character_TYPE.equals(ClassHelper.getWrapper(forLoopVariableType)) && STRING_TYPE.equals(collectionType)) {
+                // we allow auto-coercion here
+                componentType = forLoopVariableType;
+            } else {
+                componentType = inferLoopElementType(collectionType);
+            }
             if (ClassHelper.getUnwrapper(componentType) == forLoopVariableType) {
                 // prefer primitive type over boxed type
                 componentType = forLoopVariableType;
@@ -1931,7 +1937,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 componentType = MAP_ENTRY_TYPE.getPlainNodeReference();
                 componentType.setGenericsTypes(genericsTypes);
             } else if (STRING_TYPE.equals(collectionType)) {
-                componentType = ClassHelper.Character_TYPE;
+                componentType = ClassHelper.STRING_TYPE;
             } else if (ENUMERATION_TYPE.equals(collectionType)) {
                 // GROOVY-6123
                 ClassNode intf = GenericsUtils.parameterizeType(collectionType, ENUMERATION_TYPE);

http://git-wip-us.apache.org/repos/asf/groovy/blob/5d4a951b/src/test/groovy/transform/stc/LoopsSTCTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/LoopsSTCTest.groovy b/src/test/groovy/transform/stc/LoopsSTCTest.groovy
index cdb07ab..0bf2e1f 100644
--- a/src/test/groovy/transform/stc/LoopsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/LoopsSTCTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.transform.stc
 
+import groovy.transform.CompileStatic
+
 /**
  * Unit tests for static type checking : loops.
  *
@@ -45,6 +47,22 @@ class LoopsSTCTest extends StaticTypeCheckingTestCase {
         '''
     }
 
+    // GROOVY-8882
+    void testStringCollectionLoop() {
+        for (char c in 'abc') assert c instanceof Character
+        for (Character c in 'abc') assert c instanceof Character
+        for (String s in 'abc') assert s instanceof String
+        for (s in 'abc') assert s instanceof String
+    }
+
+    // GROOVY-8882
+    @CompileStatic
+    void testStringCollectionLoopCS() {
+        for (char c in 'abc') assert c instanceof Character
+        for (Character c in 'abc') assert c instanceof Character
+        for (String s in 'abc') assert s instanceof String
+        for (s in 'abc') assert s instanceof String
+    }
 
     void testMethodCallWithEachAndDefAndTwoFooMethods() {
         shouldFailWithMessages '''


[2/2] groovy git commit: GROOVY-7647: Incorrect line information for debug (closes #830)

Posted by pa...@apache.org.
GROOVY-7647: Incorrect line information for debug (closes #830)


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

Branch: refs/heads/master
Commit: 95f692dc450b2348655564ef69be51937cb95422
Parents: 5d4a951
Author: Paul King <pa...@asert.com.au>
Authored: Fri Nov 23 16:29:06 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Sat Nov 24 14:44:00 2018 +1000

----------------------------------------------------------------------
 .../org/codehaus/groovy/classgen/asm/StatementWriter.java     | 7 +++++++
 .../groovy/classgen/asm/sc/StaticCompilationTest.groovy       | 3 +--
 2 files changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/95f692dc/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
index d92f67e..f19b9cc 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -94,6 +94,13 @@ public class StatementWriter {
         }
         compileStack.pop();
 
+        // GROOVY-7647
+        if (block.getLastLineNumber() > 0) {
+            MethodVisitor mv = controller.getMethodVisitor();
+            Label blockEnd = new Label(); mv.visitLabel(blockEnd);
+            mv.visitLineNumber(block.getLastLineNumber(), blockEnd);
+        }
+
         controller.getOperandStack().popDownTo(mark);
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/95f692dc/src/test/org/codehaus/groovy/classgen/asm/sc/StaticCompilationTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/StaticCompilationTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/StaticCompilationTest.groovy
index b83430a..318f692 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/StaticCompilationTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/StaticCompilationTest.groovy
@@ -19,8 +19,6 @@
 package org.codehaus.groovy.classgen.asm.sc
 
 import org.codehaus.groovy.classgen.asm.AbstractBytecodeTestCase
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.transform.stc.GroovyTypeCheckingExtensionSupport
 
 import static org.codehaus.groovy.control.CompilerConfiguration.DEFAULT as config
 
@@ -33,6 +31,7 @@ class StaticCompilationTest extends AbstractBytecodeTestCase {
         assert bytecode.hasStrictSequence(
                 ['public m()V',
                         'L0',
+                        'LINENUMBER 3 L0',
                         'RETURN']
         )
     }