<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Lucida Console";
panose-1:2 11 6 9 4 5 4 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
color:black;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p
{mso-style-priority:99;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
color:black;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";
color:black;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";}
span.EmailStyle20
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:windowtext;}
span.EmailStyle21
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle22
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle23
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle24
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle25
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>Hi Semyon,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal style='margin-right:.5in'><span style='color:#1F497D'><< When only the first list element deleted the anchor and lead selection indexes become -1 after your fix while should be 0.<o:p></o:p></span></p><p class=MsoNormal style='margin-right:.5in'><span style='color:#1F497D'>Is it mentioned somewhere that it should be 0 ? I mean if lead index was 2 and only 3<sup>rd</sup> element is deleted, lead becomes 1. Same should be true when lead is 0 and first element is deleted. Is it rule that lead or anchor can’t go beyond 0 considering their default value is -1? I think there is a similar bug filled as why should not lead or anchor become -1.<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.0pt;font-family:"Lucida Console";color:windowtext'><a href="https://bugs.openjdk.java.net/browse/JDK-4334792">https://bugs.openjdk.java.net/browse/JDK-4334792</a><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.0pt;font-family:"Lucida Console";color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal style='margin-right:.5in'><o:p> </o:p></p><p class=MsoNormal style='margin-right:.5in'>Regards,<o:p></o:p></p><p class=MsoNormal style='margin-right:.5in'>Pankaj Bansal<o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><a name="_MailEndCompose"><span style='color:#1F497D'><o:p> </o:p></span></a></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='color:windowtext'>From:</span></b><span style='color:windowtext'> Semyon Sadetsky <br><b>Sent:</b> Wednesday, January 31, 2018 12:17 PM<br><b>To:</b> Pankaj Bansal; Jayathirth D V; swing-dev@openjdk.java.net; Sergey Bylokhov; Prasanta Sadhukhan<br><b>Subject:</b> Re: <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p>Hi Pankaj,<span style='font-size:12.0pt'><o:p></o:p></span></p><p>When only the first list element deleted the anchor and lead selection indexes become -1 after your fix while should be 0.<o:p></o:p></p><p>--Semyon<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>On 01/30/2018 01:13 AM, Pankaj Bansal wrote:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:#1F497D'>Hi Jay,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>I have made the small correction you suggested.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>webrev: <a href="http://cr.openjdk.java.net/%7Epbansal/6481195/webrev.02/">http://cr.openjdk.java.net/~pbansal/6481195/webrev.02/</a></span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Regards,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Pankaj Bansal</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> Jayathirth D V <br><b>Sent:</b> Tuesday, January 30, 2018 12:13 PM<br><b>To:</b> Pankaj Bansal; <a href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a>; Sergey Bylokhov; Semyon Sadetsky; Prasanta Sadhukhan<br><b>Subject:</b> RE: <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()<o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Hi Pankaj,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Changes are fine.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>As mentioned in previous suggestion Java code convention for different statements like if () and for () loops(<a href="http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html">http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html</a> ) we have to maintain single space between if/for and braces. In test case this needs to be updated. There is no need for another webrev please update it before you push the change.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Thanks,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Jay</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> Pankaj Bansal <br><b>Sent:</b> Monday, January 29, 2018 3:39 PM<br><b>To:</b> Jayathirth D V; <a href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a>; Sergey Bylokhov; Semyon Sadetsky; Prasanta Sadhukhan<br><b>Subject:</b> RE: <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()<o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Hi Jay,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Thanks for the review.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>I have made the suggested changes. </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>webrev: <a href="http://cr.openjdk.java.net/%7Epbansal/6481195/webrev.01/">http://cr.openjdk.java.net/~pbansal/6481195/webrev.01/</a></span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Regards,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Pankaj Bansal</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> Jayathirth D V <br><b>Sent:</b> Thursday, January 25, 2018 6:28 PM<br><b>To:</b> Pankaj Bansal; <a href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a>; Sergey Bylokhov; Semyon Sadetsky; Prasanta Sadhukhan<br><b>Subject:</b> RE: <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()<o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Hi Pankaj,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Please find my inputs:</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Test case is working properly before and after changes.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>But I think we should make changes in test to actually detect all failure cases properly instead of throwing RuntimeException when we hit first failure:</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> if (numberOfEvents > 2) {</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> throw new RuntimeException("Wrong number of Events. " +</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> "Expected: 2, Actual: " + numberOfEvents);</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> }</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> if (list.getLeadSelectionIndex() != -1) {</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> throw new RuntimeException("Wrong Lead Index. " +</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> "Expected: -1, Actual: " + list</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> .getLeadSelectionIndex());</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> }</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> if (list.getAnchorSelectionIndex() != -1) {</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> throw new RuntimeException("Wrong Anchor Index. " +</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> "Expected: -1, Actual: " + list</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> .getAnchorSelectionIndex());</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> }</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Before your code change we just hit first check throw exception which will not cover all the required conditions(proper number of events, proper lead selection index & proper anchor selection index).</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>We can update a boolean variable in each of 3 cases and then check them and throw relevant RuntimeException.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Also in test case there are some indentation problems in for loop, if condition and expressions please update them also.</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Thanks,</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'>Jay</span><o:p></o:p></p><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> Pankaj Bansal <br><b>Sent:</b> Monday, January 22, 2018 6:43 PM<br><b>To:</b> <a href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a>; Sergey Bylokhov; Semyon Sadetsky; Prasanta Sadhukhan<br><b>Subject:</b> <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()<o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Hi All,<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Please review the fix for JDK 11.</span><o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Bug:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'><a href="https://bugs.openjdk.java.net/browse/JDK-6481195">https://bugs.openjdk.java.net/browse/JDK-6481195</a></span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Webrev:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'><a href="http://cr.openjdk.java.net/%7Epbansal/6481195/webrev.00/">http://cr.openjdk.java.net/~pbansal/6481195/webrev.00/</a></span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Issue:</span><o:p></o:p></p><pre style='background:white'><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Invalid ListSelectionEvents are being fired, when the data is added after the clear() function has been called on DefaultListModel. This only happens when the index 0 was selected before calling clear.</span><o:p></o:p></pre><pre style='background:white'><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'> </span><o:p></o:p></pre><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>When the index 0 is selected on a JList and clear() function is called, anchor and lead are not being updated properly in DefaultSelectionModel as they are not being reset to -1 inside the removeIndexInterval() function. Because of this, when new elements are added in model, a ListSelectionEvent is fired from insertIndexInterval() function.</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";color:#333333;background:white'>Fix:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>The code inside removeIndexInterval function handles the case when 0 index is selected in special way. Removed that piece of code. </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>Note: </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>This also fixes <a href="https://bugs.openjdk.java.net/browse/JDK-4334792">https://bugs.openjdk.java.net/browse/JDK-4334792</a> partially when removeAllElements or clear() is called on DefaultListModel.</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>Regards</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Arial","sans-serif";background:white'>Pankaj Bansal</span><o:p></o:p></p></blockquote><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'><o:p> </o:p></span></p></div></body></html>