RFR: 8167002: JAXP schema validator: Use HashSet instead of ArrayList for tracking XML IDs

Martin Buchholz martinrb at google.com
Sat Oct 1 16:54:39 UTC 2016


On Sat, Oct 1, 2016 at 5:45 AM, Claes Redestad <claes.redestad at oracle.com>
wrote:

>
> On 2016-10-01 02:41, Martin Buchholz wrote:
>
>> https://bugs.openjdk.java.net/browse/JDK-8167002
>> http://cr.openjdk.java.net/~martin/webrevs/openjdk9/xml-id-v
>> alidation-by-hash/
>>
>>
> +1, but I have to ask what the intended benefit of writing:
>
>   ((fIds != null) ? fIds : (fIds = new HashSet<>())).add(name);
>
> rather than keeping the pre-existing pattern:
>
>   if (fIds == null) fIds = new HashSet<>();
>   fIds.add(name);
>
> If this is about bytecode optimization to help with inlining or such,
> the latter actually generate a more compact method (14 vs 16 bytecodes).


The intent was (by instinct) to not code a re-read of a field, but ... yeah
.... that wasn't achieved.
That could be done correctly using

    public void addId(String name) {
        HashSet<String> x;
        if ((x = fIds) == null) fIds = x = new HashSet<>();
        x.add(name);
    }

but I'll just revert to
        if (fIds == null) fIds = new HashSet<>();
        fIds.add(name);


More information about the core-libs-dev mailing list