RFR(M): 8199940: Print more information about class loaders in IllegalAccessErrors.
mandy.chung at oracle.com
Mon Jun 18 19:24:13 UTC 2018
Lois, Harold, and I discussed briefly how to help this patch move
forward independent of JDK-8169559 (that intends to replace
Klass::class_loader_and_module_name with a better utility method).
The format we propose is to change from:
$C1 cannot access its superinterface $C2
$C1 cannot access its superinterface $C2 ($C1 is in $M1 of loader
$L1; $C2 is in $M2 of loader $L2)
The above will depend on JDK-8169559.
The intermediate step is for JDK-8199940 to append the loader info in IAE:
$C1 cannot access its superinterface $C2 ($C1 is in loader $L1; $C2 is
in loader $L2)
This will depend on the new loader_name_and_id function introduced by
JDK-8202605. JDK-8169559 can add the module info in the exception
messages as a follow-up issue (these IAEs don't have any module info in
the current implementation anyway.)
For IAE in member access, I suggest to rephrase the message from:
tried to access method test.IllegalAccessErrorTest.iae4_m()V from class
class test.Runner4 tried to access private method
test.IllegalAccessErrorTest.iae4_m()V (test.Runner4 is in loader 'app';
test.IllegalAccessErrorTest. is in loader 'app')
What do you think?
On 5/24/18 3:15 PM, mandy chung wrote:
> On 5/24/18 2:12 PM, Lindenmaier, Goetz wrote:
>> Hi Lois,
>> I changed the code as agreed:
> For this IAE, it should include the module in the message as:
> class test.IAE1_B (in unnamed module @0x3d04a311) cannot access its
> superinterface test.IAE1_A (in module m1)
> The above is one example that does not have the loader name.
> Each module is defined to one loader so it can derive from
> the module info.
>>> java.lang.IllegalAccessError: tried to access private method
>>> MySameClassLoader/m2x/p2.c2.method2()V from class
> What about other formats:
> tried to access private method p2.c2.method2()V (in module m2x) from
> class p1.c1 (in module m1x)
> if the loader name is highly desirable (I'm unsure yet):
> tried to access private method p2.c2.method2()V (in module m2x defined
> to MySameClassLoader) from class p1.c1 (in module m1x defined to
More information about the hotspot-runtime-dev