Hi all, there is one more option:
4. Close the issue as "won't fix" and suggest the reporter to fix his code. Option 3 may not break any existing application. But it may hide bugs in applications because in my opinion setting a wrong selection interval is a bug. Just my 2 cents. Best regards, Andrej Golovnin On Fri, Dec 8, 2017 at 8:13 AM, Pankaj Bansal <pankaj.b.ban...@oracle.com> wrote: > Hi All, > > Thank you for your reviews. > > I think we need to finalize on where to make changes, before going any > further . We have following few options > > 1. Change setSelectionInterval and addSelectionInterval to throw Exception: > Make change to these functions to throw IllegalArgumentException when the > interval is out of range. This is looks correct as it does not make sense to > set selection out of bounds of the list. This also makes the JList more > compatible with the JTable. But this will break 2 jck tests which expect the > out of bound selection to be allowed. Also this can break existing > applications which are setting the wrong selection and expecting it not to > throw an exception. Also someone can still set the wrong selection by setting > the selection directly on SelectionModel instead of calling it on JList. > > 2. Change setSelectionInterval and addSelectionInterval to just return > without exception: Make changes to these function to just return if the > interval is out of bound. But this will also break the same 2 jck tests and > may break existing applications. > > 3. Change the getSelectedValues and getSelectedValuesList: Make changes to > these functions to check the selection and return the selected objects. If > the selection is out of bound, return an empty List or partial List depending > on the selection interval, instead of throwing the > ArrayIndexOutOfBoundsException. > > Option 1 stops someone from setting the wrong selection in the first place > and find bugs in case someone tries to set wrong selection. But it may break > existing application and can still cause ArrayIndexOutOfBoundsException is > someone is setting wrong selection on SelectionModel instead of going through > JList. > Option 3 does not seem to break any existing application and looks immune to > ArrayIndexOutOfBoundsException in getMethods. So maybe this is correct way. > > > Regards, > Pankaj Bansal > > > > > -----Original Message----- > From: Andrej Golovnin [mailto:andrej.golov...@gmail.com] > Sent: Wednesday, December 6, 2017 2:00 PM > To: Sergey Bylokhov > Cc: Jayathirth D V; Pankaj Bansal; swing-dev@openjdk.java.net; Semyon Sadetsky > Subject: Re: <Swing Dev> [10] Review Request: JDK-7108280 : > JList.getSelectedValuesList fails if JList.setSelectionInterval larger than > list > > Hi all, > > as a long Swing user I would like to vote against the proposed changes. The > fact is that the #setSelectionInterval and #addSelectionInterval methods of > the JList class exist in this form for a very long time and any change in the > behaviour of this methods may break existing applications. > > Technically this methods should throw an IllegalArgumentException when the > arguments are out of bounds. For example the #setRowSelectionInterval and > #addRowSelectionInterval methods of the JTable class throw an > IllegalArgumentException. > > I think you should ask someone from the Java core team who has deeper > understanding, when a change is backward compatible and when not, if it is OK > to add a check to this methods and throw an IllegalArgumentException when the > arguments are out of bounds. If it is not OK, then you can improve at least > the JavaDocs of this methods and explain in the JavaDocs that the arguments > must be in the bounds of the current ListModel. > > I would also not change the behaviour of JList#getSelectedValuesList. > The current behaviour, i.g. throwing the ArrayIndexOutOfBoundsException, > helps me to find bugs in applications. > For me setting a wrong selection interval is a bug. > > Best regards, > Andrej Golovnin > > On Tue, Dec 5, 2017 at 11:29 PM, Sergey Bylokhov <sergey.bylok...@oracle.com> > wrote: >> Hello. >> On 01/12/2017 02:47, Jayathirth D V wrote: >>> >>> As you have mentioned I also feel that adding check in >>> setSelectionInterval() or addSelectionInterval() would be a good approach. >>> Since I am not aware of swing component code I will leave this >>> decision to others. >> >> >> I also have no preference where to change this. If we will change >> setSelectionInterval()/addSelectionInterval() then we will need to >> update selection model on every change of datamodel. But if we decide >> like in the current fix to change the get methods, then we will need >> to verify all places where we use datamodel and selection model: >> for example JList.getSelectedValue() and others. >> Also we should check other classes which use the same selection model >> like JTable. >> >>> >>> Regarding http://cr.openjdk.java.net/~pbansal/7108280/webrev.002/: >>> >>> May be we are not handling the case where validateLeadIndex() fails >>> and we don’t set selection interval and it is resulting in JCK test >>> fail. If you can share what is behavior of JCK test failure after >>> your change it would be helpful. >>> >>> Also specification of setSelectionInterval() or >>> addSelectionInterval() mentions that “{@code anchor} doesn't have to >>> be less than or equal to {@code lead}”. So while validating arguments >>> for >>> setSelectionInterval() or addSelectionInterval() I think we should >>> verify the value of anchor first and then check the value of (anchor >>> + lead) instead of just checking whether lead < size. >>> >>> Thanks, >>> >>> Jay >>> >>> *From:* Pankaj Bansal >>> *Sent:* Friday, December 01, 2017 3:02 PM >>> *To:* swing-dev@openjdk.java.net; Sergey Bylokhov; Semyon Sadetsky >>> *Subject:* <Swing Dev> [10] Review Request: JDK-7108280 : >>> JList.getSelectedValuesList fails if JList.setSelectionInterval >>> larger than list >>> >>> Hi All, >>> >>> Please review the fix. >>> >>> Bug: >>> >>> https://bugs.openjdk.java.net/browse/JDK-7108280 >>> >>> Webrev: >>> >>> http://cr.openjdk.java.net/~pbansal/7108280/webrev.00/ >>> >>> Issue: >>> >>> JList.getSelectedValuesList crashes if the JList.setSelectionInterval >>> or JList.addSelectionInterval had been called earlier with interval >>> having lead greater than the size of List >>> >>> Fix: >>> >>> Made changes in JList.getSelectedValuesList to check the if the max >>> selection index is greater than the actual size of the List. If yes, >>> the max is changed to last element index of List. >>> >>> Note: >>> >>> It makes sense to change the behavior of JList.setSelectionInterval >>> or JList.addSelectionInterval to not allow to set the selection with >>> interval having indices not present in the list. But it will change >>> the behavior of this API and will result in failure of 2 JCK tests. >>> >>> Also, we will still have to put checks inside the >>> JList.getSelectedValuesList as the selection can be changed by >>> setting selection interval on DefualtListSelectionModel and there is >>> no way to check if the supplied interval range actually exist in the >>> List inside DefualtListSelectionModel. >>> >>> If changing the JList.setSelectionInterval or >>> JList.addSelectionInterval is possible, the potential fix can be following >>> webrev. >>> >>> http://cr.openjdk.java.net/~pbansal/7108280/webrev.002/ >>> >>> Regards, >>> >>> Pankaj Bansal >>> >> >> >> -- >> Best regards, Sergey.