RFR: JDK-8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
Adam Farley8
adam.farley at uk.ibm.com
Fri Mar 22 11:33:53 UTC 2019
Hi Mandy,
Answers below. :)
Mandy Chung <mandy.chung at oracle.com> wrote on 22/03/2019 00:35:00:
> From: Mandy Chung <mandy.chung at oracle.com>
> To: Adam Farley8 <adam.farley at uk.ibm.com>
> Cc: core-libs-dev <core-libs-dev at openjdk.java.net>
> Date: 22/03/2019 00:35
> Subject: Re: RFR: JDK-8216558: Lookup.unreflectSetter(Field) fails
> to throw IllegalAccessException for final fields
>
> 217 //If this is a USA test, then only the fraction
> of the expected failures will occur; those which are both static and
final.
> 218 if (fl !=
> FieldLookup.MH_UNREFLECT_SETTER_ACCESSIBLE &&
> actualFieldNames.stream().anyMatch(s->!(s.contains("static")&&
> (s.contains("final")))))
>
> What is a USA test?
UNREFLECT_SETTER_ACCESSIBLE.
I was trying to be brief, and I lost readability.
Will re-upload with the expanded name.
>
> Why the assertion becomes conditional?
Because we only need this check if the test is USA.
Previously, setting a variable as accessible gave us a setter without
errors 100% of the time.
The test expects this, and anticipates an empty list of variables which
threw errors when passed to unreflectSetter.
Since we now throw an exception when calling the unreflectSetter method,
even when the variable is accessible, this check ensures that the only
variables throwing an exception are the static final fields.
>
> Have you considered another way doing it?
Yep, several. This seemed the simplest.
Other options I considered were:
--------------
1) Changing the test to store a list of variables, rather than just their
names, so the "isAccessible" method could be used instead.
Discarded because it makes the array compare slower for every test.
2) Editing the array of anticipated excludeds during test execution, to
remove the exceptions we don't expect to see.
Discarded because the change seemed too bulky to accommodate a single
test.
3) Make the "isAccessible" methods smarter, and rely on them exclusively
to determine the list of anticipated exceptions.
Ditto
---------------------
Option 3 could work. I prefer the one-liner stream check.
Thoughts?
- Adam
>
> Mandy
>
> On 3/21/19 9:51 AM, Adam Farley8 wrote:
> Hi Mandy,
>
> Good spot. Have updated the webrev.
>
> http://cr.openjdk.java.net/~afarley/8216558/webrev/
>
> Could you review the proposed change?
>
> Also, I ran the invoke tests as advised, and the only one that
> fails is "LFGarbageCollectedTest.java", which also fails in the
> same way when run against a non-patched java, so I think we're ok.
>
> Best Regards
>
> Adam Farley
> IBM Runtimes
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
More information about the core-libs-dev
mailing list