You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by pa...@apache.org on 2015/06/01 15:02:21 UTC
incubator-groovy git commit: GROOVY-4255: BUG! exception in phase
'class generation' ... SpreadExpression should not be visited here
Repository: incubator-groovy
Updated Branches:
refs/heads/master 24ec32e6a -> 3e8a49a6a
GROOVY-4255: BUG! exception in phase 'class generation' ... SpreadExpression should not be visited here
Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/3e8a49a6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/3e8a49a6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/3e8a49a6
Branch: refs/heads/master
Commit: 3e8a49a6abe98586c9656544b5a591eabe6b36da
Parents: 24ec32e
Author: Paul King <pa...@asert.com.au>
Authored: Mon Jun 1 23:02:04 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Mon Jun 1 23:02:04 2015 +1000
----------------------------------------------------------------------
.../groovy/runtime/ScriptBytecodeAdapter.java | 6 +++++-
.../groovy/operator/SpreadListOperatorTest.groovy | 14 ++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/3e8a49a6/src/main/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java b/src/main/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index 8579015..d776d63 100644
--- a/src/main/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -788,7 +788,11 @@ public class ScriptBytecodeAdapter {
} else if (value.getClass().isArray()) {
ret.addAll(DefaultTypeTransformation.primitiveArrayToList(value));
} else {
- throw new IllegalArgumentException("cannot spread the type " + value.getClass().getName() + " with value " + value);
+ String error = "cannot spread the type " + value.getClass().getName() + " with value " + value;
+ if (value instanceof Map) {
+ error += ", did you mean to use the spread-map operator instead?";
+ }
+ throw new IllegalArgumentException(error);
}
spreadPos++;
}
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/3e8a49a6/src/test/groovy/operator/SpreadListOperatorTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/operator/SpreadListOperatorTest.groovy b/src/test/groovy/operator/SpreadListOperatorTest.groovy
index 1693878..62a1097 100644
--- a/src/test/groovy/operator/SpreadListOperatorTest.groovy
+++ b/src/test/groovy/operator/SpreadListOperatorTest.groovy
@@ -91,6 +91,20 @@ class SpreadListOperatorTest extends GroovyTestCase {
items = orig.toList()
items[*1..2, 4] = 'X'
assert items == ['a', 'X', 'X', 'd', 'X', 'f']
+
+ def message = shouldFail IllegalArgumentException, '''
+ def items = [1, 2, 3, 4]
+ items[*new Date()]
+ '''
+ assert message.contains('cannot spread the type java.util.Date')
+
+ message = shouldFail IllegalArgumentException, '''
+ def items = [1, 2, 3, 4]
+ def map = [a: 1]
+ items[*map]
+ '''
+ assert message.contains('cannot spread the type java.util.LinkedHashMap')
+ assert message.contains('did you mean to use the spread-map operator instead?')
}
def sum(a, b, c, d) {