Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 1.7.7, 1.8-beta-4
-
Fix Version/s: None
-
Component/s: groovy-jdk
-
Labels:None
-
Environment:any
-
Number of attachments :
Description
reverse ranges like X..-Y are used in lists to represent forward ranges of the form X..list.size()-Y.
this is not the case with arrays, as these special cases return a list that match the reverse range.
this can easily be tested with this snippet
def list = [1,2,3,4] int[] array = list assert list[2..-1] == [3,4] assert array[2..-1] == [3,4]
which currently yields
Assertion failed: assert array[2..-1] == [3,4] | | | | | false | [3, 2, 1, 4] [1, 2, 3, 4]
we can track this to the protected DGM.primitiveArrayGet(Object,Range) that is called from DGM.getAt(int[],Range) and its siblings.
this method just iterates the range to generate the returned list, whereas the list equivalent DGM.getAt(List,Range) makes use of DGMS.subListBorders(int,Range) to detect the reverse ranges.
note the title might be misleading, as only the described special cases work differently than expected.
in fact, the problem is that the returned list matches exactly what the reverse range asked for...
but you get the idea.
(can issues be edited?)