Review needed for 7132879 to address the findbug errors in CachedRowSetImpl, SerialStruct, BaseRow, SerialInputImpl, SerialOutputImpl
Rémi Forax
forax at univ-mlv.fr
Thu Jan 26 23:47:42 UTC 2012
On 01/27/2012 12:12 AM, Lance Andersen - Oracle wrote:
> Hi Remi,
>
> Thanks for the feedback, I made the suggested changes http://cr.openjdk.java.net/~lancea/7133815/webrev.01/ and re-ran the rowset tck .
>
> Best
> Lance
Lance,
sorry to not have been crystal clear in my previous email,
I've forgotten to mention that because the field is stored in a local
variable
to do the nullcheck you can reuse the same local variable instead of
reloading the value from the field which is a good code practice.
So instead of
int[] keyColumns = this.keyCols;
return (keyColumns == null) ? null : Arrays.copyOf(keyCols, keyCols.length);
the code should be
int[] keyColumns = this.keyCols;
return (keyColumns == null) ? null : Arrays.copyOf(keyColumns,keyColumns.length);
Now, this is not strictly needed for the codes of the changeset because
the JIT
can easily prove in these codes that the field will not be changed between
the first load and the subsequent accesses as arguments of Arrays.copyOf.
Anyway, as i said, it's a good practice to avoid to do several getfields
if the value is not supposed to change in between.
Rémi
PS: as a bonus, using local variables reduces the size of the generated
bytecodes,
aload_1 takes one byte and getfield takes three bytes :)
> On Jan 26, 2012, at 5:21 PM, Rémi Forax wrote:
>
>> On 01/26/2012 10:46 PM, Lance Andersen - Oracle wrote:
>>> Hi,
>>>
>>> Looking for a reviewer for http://cr.openjdk.java.net/~lancea/7133815/webrev.00/
>>>
>>> this is a small change to address 2 findbug errors. The findbug issues being addressed:
>>>
>>> May expose internal representation by returning reference to mutable object
>>>
>>> and
>>>
>>> Load of known null value
>>>
>>>
>>> For CachedRowSetImpl, SerialStruct, BaseRow, SerialInputImpl, SerialOutputImpl
>> Hi Lance,
>> I think it's better to use array.clone() or
>> Arrays.copyOf(array, array.length) which is a little faster.
>>
>> so the code of CachedRowSetImpl should be:
>>
>> int[]keyCols = this.keyCols;
>> return (keyCols == null)? null: Arrays.copyOf(keyCols, keyCols.length);
>>
>> otherwise the code of SQLOutputImpl is ok for me.
>>
>> cheers,
>> Rémi
>>
>
> Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
> Oracle Java Engineering
> 1 Network Drive
> Burlington, MA 01803
> Lance.Andersen at oracle.com
>
More information about the core-libs-dev
mailing list