[ 
https://issues.apache.org/jira/browse/GROOVY-10682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17609061#comment-17609061
 ] 

Felix Schnabel edited comment on GROOVY-10682 at 9/24/22 10:12 PM:
-------------------------------------------------------------------

I would have some questions about the new {{ArrayGroovyMethods}} approach:
 # This class should be contained in the same folder as 
{{DefaultGroovyMethods}} and also extend {{DefaultGroovyMethodsSupport}}? Is 
there anything else that needs to be done that the methods defined in this 
class are available at groovy runtime?
 # Should each instance of {{each}} that works with lists or arrays be moved to 
this new class (`each` on maps would still stay in {{DefaultGroovyMethods}})? 
There are currently:
 ## each(T[] self, Closure closure) -> move
 ## each(primitive[] self, Closure closure) -> move
 ## each(T self, Closure closure) -> move?
 ## each(Iterable<T> self, Closure closure) -> move?
 ## each(Iterator<T> self, Closure closure) -> move?
 ## each(Collection<T> self, Closure closure) -> don't move?
 ## each(List<T> self, Closure closure) -> don't move?
 ## each(Set<T> self, Closure closure) -> don't move?
 ## each(SortedSet<T> self, Closure closure) -> don't move?
 ## each(Map<K, V> self, Closure closure) -> don't move

I would still write the hand coded primitive extensions with the actual 
implementation (option 1) since it is the most efficient unless you want prefer 
one of the other options.


was (Author: JIRAUSER295331):
I would have some questions about the new `ArrayGroovyMethods` approach:
 # This class should be contained in the same folder as `DefaultGroovyMethods` 
and also extend `DefaultGroovyMethodsSupport`? Is there anything else that 
needs to be done that the methods defined in this class are available at groovy 
runtime?
 # Should each instance of `each` that works with lists or arrays be moved to 
this new class (`each` on maps would still stay in `DefaultGroovyMethods`)? 
There are currently:
 ## each(T[] self, Closure closure) -> move
 ## each(primitive[] self, Closure closure) -> move
 ## each(T self, Closure closure) -> move?
 ## each(Iterable<T> self, Closure closure) -> move?
 ## each(Iterator<T> self, Closure closure) -> move?
 ## each(Collection<T> self, Closure closure) -> don't move?
 ## each(List<T> self, Closure closure) -> don't move?
 ## each(Set<T> self, Closure closure) -> don't move?
 ## each(SortedSet<T> self, Closure closure) -> don't move?
 ## each(Map<K, V> self, Closure closure) -> don't move

I would still write the hand coded primitive extensions with the actual 
implementation (option 1) since it is the most efficient unless you want prefer 
one of the other options.

> Provide eachWithIndex for primitive arrays
> ------------------------------------------
>
>                 Key: GROOVY-10682
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10682
>             Project: Groovy
>          Issue Type: Improvement
>          Components: groovy-jdk
>            Reporter: Eric Milles
>            Assignee: Eric Milles
>            Priority: Minor
>
> Consider the following:
> {code:groovy}
> @groovy.transform.TypeChecked
> void test(int[] ints) {
>   ints.eachWithIndex { value, index ->
>     println "$index: ${value.doubleValue()}"
>   }
> }
> test(0,1,2,3,4,5)
> {code}
> Compiler reports "[Static type checking] - Cannot find matching method 
> java.lang.Object#doubleValue()"
> {{eachWithIndex}} is only provided for reference types, so "value" is seen as 
> Object by the type checker.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to