Shil Sinha created GROOVY-7654: ---------------------------------- Summary: Iterable as List and Iterable.asList() have different semantics Key: GROOVY-7654 URL: https://issues.apache.org/jira/browse/GROOVY-7654 Project: Groovy Issue Type: Bug Components: groovy-jdk Affects Versions: 2.4.5 Reporter: Shil Sinha
For an Iterable `foo` which is not also a collection, `foo.asList()` and `foo as List` are not equivalent. The latter goes through the asType(Object, Class) path and ultimately returns a proxy. This is unexpected, and can result in some inconsistencies. A simple example: {code} class IterableWrapper implements Iterable { Iterable delegate Iterator iterator() { delegate.iterator() } } def itw = new IterableWrapper(delegate: [1,2,3]) def itwAsList = itw.asList() def itwAsTypeList = itw as List assert itwAsList == itwAsTypeList assert itwAsList[0] == itwAsTypeList[0] {code} The first assertion passes, but the second fails with: {code} groovy.lang.MissingMethodException: No signature of method: IterableWrapper.get() is applicable for argument types: (java.lang.Integer) values: [0] {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)