You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/07/30 14:41:31 UTC

[groovy] branch GROOVY_4_0_X updated: GROOVY-10712: STC: for-in loop over iterator

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 80800c3906 GROOVY-10712: STC: for-in loop over iterator
80800c3906 is described below

commit 80800c39065dcbb99a7334ed05b4eb5144233655
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Jul 30 09:35:00 2022 -0500

    GROOVY-10712: STC: for-in loop over iterator
---
 .../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java    | 4 ++++
 src/test/groovy/transform/stc/LoopsSTCTest.groovy                   | 6 +++---
 2 files changed, 7 insertions(+), 3 deletions(-)

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 473a1ccb55..64fd0f83cb 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2002,6 +2002,10 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 ClassNode col = GenericsUtils.parameterizeType(collectionType, ENUMERATION_TYPE);
                 componentType = getCombinedBoundType(col.getGenericsTypes()[0]);
 
+            } else if (isOrImplements(collectionType, Iterator_TYPE)) { // GROOVY-10712
+                ClassNode col = GenericsUtils.parameterizeType(collectionType, Iterator_TYPE);
+                componentType = getCombinedBoundType(col.getGenericsTypes()[0]);
+
             } else if (isStringType(collectionType)) {
                 componentType = STRING_TYPE;
             } else {
diff --git a/src/test/groovy/transform/stc/LoopsSTCTest.groovy b/src/test/groovy/transform/stc/LoopsSTCTest.groovy
index 70039d5b55..57627ba2e0 100644
--- a/src/test/groovy/transform/stc/LoopsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/LoopsSTCTest.groovy
@@ -238,14 +238,14 @@ class LoopsSTCTest extends StaticTypeCheckingTestCase {
         '''
     }
 
-    // GROOVY-8487
+    // GROOVY-8487, GROOVY-10712
     void testForInLoopOnIterator() {
         assertScript '''
             def list = []
             for (item in ['a','b','c'].iterator()) {
-                list.add(item)
+                list.add(item.toUpperCase())
             }
-            assert list.join('') == 'abc'
+            assert list == ['A','B','C']
         '''
     }