<Swing Dev> Accessibility inner classes in AccessibleJTable do not stick to AccessibleComponent.getLocationOnScreen api
Frank Ding
dingxmin at linux.vnet.ibm.com
Mon Aug 20 06:22:14 UTC 2012
Hi Pavel
Thanks for review.
To Jonathan,
Thanks for committing. It looks good.
Best regards,
Frank
On 8/20/2012 1:20 PM, Jonathan Lu wrote:
> Hi Pavel,
>
> Thanks for review, the change has been pushed to
> http://hg.openjdk.java.net/jdk8/awt/jdk/rev/2fe9c1f0b16b
>
> changeset: 5692:2fe9c1f0b16b
> tag: tip
> user: dingxmin
> date: Mon Aug 20 13:16:18 2012 +0800
> files: src/share/classes/javax/swing/JTable.java
> test/javax/swing/JTable/7188612/JTableAccessibleGetLocationOnScreen.java
> description:
> 7188612: JTable's AccessibleJTable throws
> IllegalComponentStateException instead of null
> Reviewed-by: rupashka
>
> And to Frank, could you pls verify it?
>
> Thanks
> Jonathan
>
> On 08/17/2012 07:13 PM, Pavel Porvatov wrote:
>> Hi Frank,
>>> Hi Pavel,
>>> Thanks for your review again. Another review package
>>> incorporating your comments is @
>>> http://cr.openjdk.java.net/~dingxmin/7188612/webrev.01
>>> Could you please take a look at it ?
>> The fix looks good for me.
>>
>> Regards, Pavel
>>>
>>> Thanks,
>>> Frank
>>>
>>> On 8/16/2012 11:02 PM, Pavel Porvatov wrote:
>>>> Hi Frank,
>>>>> Hi Pavel,
>>>>> Thanks for your comments from which I learned a lot. A new
>>>>> review patch is created by incorporating your comments @
>>>>>
>>>>> http://cr.openjdk.java.net/~dingxmin/7188612/webrev.00/
>>>>>
>>>>> Could you please review it again?
>>>> I have few comments about the last webrev:
>>>> 1. There is no need to re-throw exceptions via exThrownInEDT. You
>>>> can just throw RuntimeException if the test fails. It's ok to throw
>>>> RuntimeException on the EDT, jtreg will fail in that case
>>>> 2. Can we join two SwingUtilities.invokeAndWait into one?
>>>> 3. Comments
>>>> 96 // cast to interface AccessibleComponent to call
>>>> getLocationOnScreen()
>>>> and
>>>> 109 // cast to interface AccessibleComponent to call
>>>> getLocationOnScreen()
>>>> look unnecessary
>>>>
>>>> Other code looks good for me
>>>>
>>>> Regards, Pavel
>>>>>
>>>>> Best regards,
>>>>> Frank
>>>>>
>>>>> On 8/6/2012 9:54 PM, Pavel Porvatov wrote:
>>>>>> Hi Frank,
>>>>>>
>>>>>> The fix looks good but I have several comments for the test:
>>>>>> 1. The Swing components should be created and accessed only from
>>>>>> EDT thread. Therefore the assertGetLocation method should be on
>>>>>> EDT as well
>>>>>>
>>>>>> 2. I'd remove lines 59-61
>>>>>>
>>>>>> 3. The lines
>>>>>> 79 // Display the window.
>>>>>> 80 frame.setVisible(true);
>>>>>> 81 // make the frame invisible to test
>>>>>> getLocationOnScreen() of
>>>>>> 82 // JTable$AccessibleJTable$AccessibleJTableHeaderCell
>>>>>> 83 // and JTable$AccessibleJTable$AccessibleJTableCell
>>>>>> 84 frame.setVisible(false);
>>>>>> don't guaranty that the frame becomes visible for awhile. You
>>>>>> should use SunToolkit.realsync for that (take a look at other
>>>>>> tests). Is it really necessary for the test to show and hide the
>>>>>> frame?
>>>>>>
>>>>>> 4. Why don't you cast getAccessibleContext into AccessibleTable
>>>>>> in one line, but wrote six lines for that:
>>>>>> 88 AccessibleContext context = (AccessibleContext) table
>>>>>> 89 .getAccessibleContext();
>>>>>> 90 // To get
>>>>>> JTable$AccessibleJTable$AccessibleJTableHeaderCell instance,
>>>>>> 91 // we need to first
>>>>>> 92 // convert the context var to type AccessibleTable
>>>>>> 93 AccessibleTable accessibleTable = (AccessibleTable)
>>>>>> context;
>>>>>>
>>>>>> 5. Could you please remove useless comments like:
>>>>>> 79 // Display the window.
>>>>>> 80 frame.setVisible(true);
>>>>>>
>>>>>> 90 // To get
>>>>>> JTable$AccessibleJTable$AccessibleJTableHeaderCell instance,
>>>>>> 91 // we need to first
>>>>>> 92 // convert the context var to type AccessibleTable
>>>>>>
>>>>>> 94 // and then get
>>>>>> JTable$AccessibleJTable$AccessibleTableHeader
>>>>>>
>>>>>> etc.
>>>>>>
>>>>>> Only comments like
>>>>>> 81 // make the frame invisible to test
>>>>>> getLocationOnScreen() of
>>>>>> 82 // JTable$AccessibleJTable$AccessibleJTableHeaderCell
>>>>>> 83 // and JTable$AccessibleJTable$AccessibleJTableCell
>>>>>>
>>>>>> 100 // getLocation() must be null according to its
>>>>>> javadoc and no exception
>>>>>> 101 // is thrown
>>>>>> looks reasonable for me in the provided test
>>>>>>
>>>>>> Regards, Pavel
>>>>>>
>>>>>>
>>>>>>> Hi guys
>>>>>>> According to javadoc of
>>>>>>> AccessibleComponent.getLocationOnScreen, it returns null instead
>>>>>>> of throwing IllegalComponentStateException when the
>>>>>>> corresponding GUI object is not visible.
>>>>>>> However, two accessibility inner classes of JTable,
>>>>>>> JTable$AccessibleJTable$AccessibleJTableCell and
>>>>>>> Table$AccessibleJTable$AccessibleJTableHeaderCell implementing
>>>>>>> AccessibleComponent throw IllegalComponentStateException when
>>>>>>> the corresponding JTable is not visible. This behavior
>>>>>>> conflicts with the spec.
>>>>>>> I have submitted a bug in sunbug system reporting the issue,
>>>>>>> and received two acknowledgement emails (bug id 7188613 and
>>>>>>> 7188612, don't know why there are two?). I created a patch to
>>>>>>> fix the issue with a jtreg test case. Both the patch and the
>>>>>>> test are uploaded into the following space.
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~youdwei/ojdk-491/webrev.02/
>>>>>>>
>>>>>>> Would anyone help to review the patch?
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Frank
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the swing-dev
mailing list