Hi Semyon, <<what will be the return from JList.getSelectedIndices() in the issue scenario? I have not made any changes to JList.getSelectedIndices method. It will return the selected indices in selection model.
Regards, Pankaj Bansal -----Original Message----- From: Semyon Sadetsky Sent: Friday, March 9, 2018 7:17 AM To: Pankaj Bansal; swing-dev@openjdk.java.net Subject: Re: <Swing Dev> [10] Review Request: JDK-7108280 : JList.getSelectedValuesList fails if JList.setSelectionInterval larger than list Hi Pankaj, what will be the return from JList.getSelectedIndices() in the issue scenario? --Semyon On 01/03/2018 03:53 AM, Pankaj Bansal wrote: > Hi Sergey, > > I have made the changes you suggested for this bug. Please have a look. > Webrev: http://cr.openjdk.java.net/~pbansal/7108280/webrev.01/ > > I checked classes like JList, JTable which use DefaultListSelectionModel to > find the methods where DataModel and ListSelectionModel are used together. > In JList, getSelectedValues, getSelectedValuesList and getSelectedValue are > three APIs. I have made changes to these APIs. > In JTable, I could not find any API which uses both DataModel and > ListSelectionModel together. > > Hi Andrej, > We cannot change the set methods (setSelectionInterval and > addSelectionInterval) here as they will break backward compatibility. Someone > can also set a custom ListSelectionModel which may cause exception in > get(getSelectedValues, getSelectedValuesList and getSelectedValue) methods. > So we will have to make changes to get methods only. In JTable, these > exceptions don’t because of the above mentioned reasons. But these exceptions > can happen in JList and we can't leave the code unchanged. > > > Regards, > Pankaj Bansal > > -----Original Message----- > From: Andrej Golovnin [mailto:andrej.golov...@gmail.com] > Sent: Friday, December 8, 2017 1:10 PM > To: Pankaj Bansal > Cc: Sergey Bylokhov; Jayathirth D V; swing-dev@openjdk.java.net > Subject: Re: <Swing Dev> [10] Review Request: JDK-7108280 : > JList.getSelectedValuesList fails if JList.setSelectionInterval larger > than list > > 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.