[ 
https://issues.apache.org/jira/browse/GROOVY-8966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Sun updated GROOVY-8966:
-------------------------------
    Fix Version/s:     (was: 3.0.0)
                   3.0.0-rc-4

> Exclusive NumberRange is converted to inclusive when used by 
> List.getAt(range).
> -------------------------------------------------------------------------------
>
>                 Key: GROOVY-8966
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8966
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-runtime
>    Affects Versions: 2.5.4
>            Reporter: Sean Fitts
>            Assignee: Daniel Sun
>            Priority: Minor
>             Fix For: 3.0.0-rc-4
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> When constructing an exclusive range, if the types of the left and right 
> sides are explicitly typed and aren't both int the result at runtime is an 
> instance of `NumberRange`.  When this is passed to the List.getAt helper 
> method it calls `DefaultGroovyMethodsSupport.subListBorders` which at line 88 
> returns an instance of `RangeInfo` for an inclusive range.
> Contrast this with the code in IntRange which explicitly checks the 
> `inclusive` flag and returns the correct range info.
> The following code blocks runs:
> {code:java}
> def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> int x = 10
> println array[x..<11]
> {code}
> The following code produces an IndexOutOfBounds exception:
> {code:java}
> def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> int x = 10
> println array[x..<11L]
> // Also broken
> def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> long x = 10
> println array[x..<11L]
> // Another broken variant
> def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> Long x = 10
> println array[x..<11L]{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to