<Swing Dev> [9] Review fix for JDK-8020039 : SynthTableHeaderUI refers to possibly null parameter in cell renderer
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Fri Feb 19 22:46:27 UTC 2016
On 20.02.16 0:30, Miguel Munoz wrote:
> In any case, whenever it's not obvious why a seemingly vital parameter
> could be null, it would be useful if there were some comments in the
> code to explain this. I have long felt that the many java APIs could be
> improved by specifying which parameters are allowed to be null.
I agree, but this particular case is specified already [1], and this is
why this fix is needed:
TableCellRenderer.java
* @param table the <code>JTable</code> that is asking the
* renderer to draw; can be <code>null</code>
[1]
https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableCellRenderer.html
>
> -- Miguel
>
>
> On Friday, February 19, 2016 1:04 AM, Ajit Ghaisas
> <ajit.ghaisas at oracle.com> wrote:
>
>
> Hi,
> There are the some good points made by Miguel regarding null checks
> – but, in this case the table being null is a valid case.
> While rendering the TableHeader, it is possible to be in a situation
> where ‘table’ parameter can be null.
> Please refer to a similar discussion :
> https://community.oracle.com/thread/2279601?start=0&tstart=0
> I have done corrections to address Sergey’s second question and
> simplified the test code.
> Please review updated webrev :
> http://cr.openjdk.java.net/~arapte/ajit/8020039/webrev.04/
> Regards,
> Ajit
> *From:*Miguel Munoz [mailto:swingguy1024 at yahoo.com]
> *Sent:* Thursday, February 18, 2016 4:29 PM
> *To:* Ajit Ghaisas; Sergey Bylokhov; Rajeev Chamyal; Alexander
> Scherbatiy; swing-dev at openjdk.java.net
> *Subject:* Re: <Swing Dev> [9] Review fix for JDK-8020039 :
> SynthTableHeaderUI refers to possibly null parameter in cell renderer
> It would seem to me that if the table is null, you have a bug in another
> class. Is there a valid reason for the table to be null? I would guess not.
>
> In my experience, many null checks are either unnecessary or only serve
> to hide bugs. Steve Maguire writes about this in his book Writing Solid
> Code.
> -- Miguel Muñoz
> On Wednesday, February 17, 2016 10:52 PM, Ajit Ghaisas
> <ajit.ghaisas at oracle.com <mailto:ajit.ghaisas at oracle.com>> wrote:
> Hi,
>
> Goods finding Sergey.
>
> 1. In file,
> src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java,
> call to setText() and setBorder() should be made irrespective of whether
> table in null or not. I have made this change.
> 2. The changes to SynthTableHeaderUI.java are correct. We cannot
> assume a table property (enabled) when table is null.
> A call to super. getTableCellRendererComponent() is already
> made from this method which in turn calls setText() and setBorder().
>
> Please review updated webrev :
> http://cr.openjdk.java.net/~arapte/ajit/8020039/webrev.03/
>
> Regards,
> Ajit
>
>
> -----Original Message-----
> From: Sergey Bylokhov
> Sent: Wednesday, February 17, 2016 8:41 PM
> To: Rajeev Chamyal; Ajit Ghaisas; Alexander Scherbatiy;
> swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> Subject: Re: <Swing Dev> [9] Review fix for JDK-8020039 :
> SynthTableHeaderUI refers to possibly null parameter in cell renderer
>
> Hi, Hello Ajit.
> I am not sure that exclusion of the code is a correct fix here. For
> example can you clarify should we call setText(or other setXXX) when the
> table is null or not? Another question is: should we skip the code in
> SynthTableHeaderUI.java or we can assume table==null as enabled table?
>
> On 17.02.16 14:29, Rajeev Chamyal wrote:
>> Looks good to me.
>>
>> Regards,
>>
>> Rajeev Chamyal
>>
>> *From:*Ajit Ghaisas
>> *Sent:* 17 February 2016 16:51
>> *To:* Rajeev Chamyal; Sergey Bylokhov; Alexander Scherbatiy;
>>swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
>> *Subject:* RE: <Swing Dev> [9] Review fix for JDK-8020039 :
>> SynthTableHeaderUI refers to possibly null parameter in cell renderer
>>
>> Hi,
>>
>> I have corrected formatting of test code and removed the
>> additional System.out.printlns.
>>
>> Please review :
>>http://cr.openjdk.java.net/~arapte/ajit/8020039/webrev.02/
>>
>> Regards,
>>
>> Ajit
>>
>> *From:*Ajit Ghaisas
>> *Sent:* Tuesday, February 16, 2016 3:12 PM
>> *To:* Rajeev Chamyal; Sergey Bylokhov; Alexander Scherbatiy;
>>swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> <mailto:swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>>
>> *Subject:* Re: <Swing Dev> <Swing-dev> [9] Review fix for JDK-8020039 :
>> SynthTableHeaderUI refers to possibly null parameter in cell renderer
>>
>> Hi,
>>
>> Thanks Rajeev for review comments.
>>
>> I have checked - windows LAF WindowsTableHeaderUI handles it
>> correctly.
>>
>> I have added null check for MacOs Aqua.
>>
>> Also, I have added a test checking for this null pointer access.
>>
>> Please review --
>>http://cr.openjdk.java.net/~arapte/ajit/8020039/webrev.01/
>>
>> Regards,
>>
>> Ajit
>>
>> *From:*Rajeev Chamyal
>> *Sent:* Monday, February 15, 2016 5:39 PM
>> *To:* Ajit Ghaisas; Sergey Bylokhov; Alexander Scherbatiy;
>>swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> <mailto:swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>>
>> *Subject:* RE: <Swing-dev> [9] Review fix for JDK-8020039 :
>> SynthTableHeaderUI refers to possibly null parameter in cell renderer
>>
>> Hello Ajit,
>>
>> Can you please if similar fix is required for other LAF windows ,Aqua etc.
>>
>> Please add a regression test case also.
>>
>> Regards,
>>
>> Rajeev Chamyal
>>
>> *From:*Ajit Ghaisas
>> *Sent:* 15 February 2016 17:30
>> *To:* Rajeev Chamyal; Sergey Bylokhov; Alexander Scherbatiy;
>>swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> <mailto:swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>>
>> *Subject:* <Swing-dev> [9] Review fix for JDK-8020039 :
>> SynthTableHeaderUI refers to possibly null parameter in cell renderer
>>
>> Hi,
>>
>> Please review the fix for jdk9,
>>
>> Bug:https://bugs.openjdk.java.net/browse/JDK-8020039
>>
>> Webrev:http://cr.openjdk.java.net/~arapte/ajit/8020039/webrev.00/
>>
>> Issue :
>>
>> If null is passed as 'table' parameter to
>> SynthTableHeaderUI::getTableCellRendererComponent() method in
>>
>> src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeader
>> UI.java,
>>
>> there is Null Pointer Exception.
>>
>> Analysis :
>>
>> This method already has a null check for 'table' parameter for
>> second access of this parameter in method.
>>
>> Whereas the first access of the 'table' parameter lacks this check.
>>
>> Fix :
>>
>> Added null check for the first access of 'table' parameter in
>> SynthTableHeaderUI::getTableCellRendererComponent().
>>
>> There is no else block added as the flow continues and passes
>> table to base class method using super. getTableCellRendererComponent().
>>
>> The passed parameter is already checked in base class method
>> correctly. Hence, no change is needed in base class.
>>
>> Test :
>>
>> The fix is pretty straight forward.
>>
>> Executed the code snippet given in the bug description. There is
>> no NPE after the fix.
>>
>> Regards,
>>
>> Ajit
>>
>
>
> --
> Best regards, Sergey.
>
>
--
Best regards, Sergey.
More information about the swing-dev
mailing list