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:46:37 UTC
[1/2] groovy git commit: GROOVY-7647: Incorrect line information for
debug (closes #830)
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_5_X 0dc69445c -> d21d696de
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/d21d696d
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d21d696d
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d21d696d
Branch: refs/heads/GROOVY_2_5_X
Commit: d21d696decd57168068fc974d3836f1e6089c7d3
Parents: aef54c6
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:46:28 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/d21d696d/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 1550237..b1d257a 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/d21d696d/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']
)
}
[2/2] groovy git commit: GROOVY-8882: CS: Loop over elements of
String has different element type (closes #827)
Posted by pa...@apache.org.
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/aef54c63
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/aef54c63
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/aef54c63
Branch: refs/heads/GROOVY_2_5_X
Commit: aef54c6328b2b0b27f99e7704202cf772657f86f
Parents: 0dc6944
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:46:28 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/aef54c63/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/aef54c63/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 943ef6d..d786f14 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1835,8 +1835,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;
@@ -1880,7 +1886,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/aef54c63/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 '''