RFR(M): 8199940: Print more information about class loaders in IllegalAccessErrors.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Wed Jun 13 12:00:38 UTC 2018
Hi Lois, Mandy,
Is there any progress on 8202605?
Feature close for jdk11 is coming up (28.6.!) and I would like
to get this change into jdk11. I'm now stuck with this for quite a
while.
Or should I go ahead, implement the messages as you proposed
except for the loader names, where I could call loader_name() for
now and you will replace it by the new method?
Also, I could make a proposal for the new loader_name() in a
change of its own, without consolidating everything?
This would help as upcoming changes can use it right away.
Best regards,
Goetz.
> -----Original Message-----
> From: Lois Foltan [mailto:lois.foltan at oracle.com]
> Sent: Freitag, 8. Juni 2018 15:39
> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; hotspot-runtime-
> dev at openjdk.java.net runtime <hotspot-runtime-dev at openjdk.java.net>;
> Mandy Chung <mandy.chung at oracle.com>
> Subject: Re: RFR(M): 8199940: Print more information about class loaders in
> IllegalAccessErrors.
>
> > Hi Mandy,
> >
> > I like this proposal a lot.
> > * it contains all necessary information
> > * I like that it also contains the @id
> > * I like that the major message is in a clear sentence at the
> > beginning, the further information in parentheses at the end.
> >
> > I don't care about single or double quotes, but in the messages
> > I only saw double quotes so far. A lot of messages will have to
> > be changed to make this consistent.
> >
> > About the implementation:
> >
> > Do I understand correctly that
> > classLoaderData::loader_name() should be changed to return either of
> > com.acme.MySameClassLoader at 423aefd2
> > 'app'
> > 'Cool lib loader' @4567 (is the space before @ intended?)
> > and Klass::class_loader_and_module_name(verbose) should return
> > test.IAE1_B in unnamed module of loader
> com.acme.MySameClassLoader at 423aefd2
> > test.IAE1_A in unnamed module of loader 'app'
> > p2.C2 in module m2x at 9.0 of loader 'app'
> > p1.C1 in module m1x at 2.0 of loader 'app'
> >
> > Also, there currently are
> > Klass::external_name()
> > Klass::class_loader_and_module_name()
> > classLoaderData::loader_name()
> > java_lang_ClassLoader::name()
> > java_lang_ClassLoader::describe_external()
> >
> > These function names are often misunderstood.
> > It's unclear that classLoaderData::loader_name() and
> > java_lang_ClassLoader::name() do different things,
> > loader_name let's one assume it returns the name field
> > of the ClassLoader class.
> Hi Goetz,
> Glad you like the proposal. I am currently working on consolidating all
> the above methods you list into something more consistent for class
> loaders. See https://bugs.openjdk.java.net/browse/JDK-8202605.
>
> >
> > Klass::class_loader_and_module_name() sounds as if
> > only the name of the classloader and the name of
> > the module are printed, not the name of the class.
> >
> > Maybe we should rename like this:
> > Klass::class_loader_and_module_name() --> full_class_description
> > classLoaderData::loader_name() --> full_loader_description
>
> I will also be working on implementing new utility methods probably
> within Klass to be used consistently by the various error messages. See
> the RFE, https://bugs.openjdk.java.net/browse/JDK-8169559. I may decide
> to either remove Klass::class_loader_and_module_name() or rename it to
> something very specific to indicate that it is the format that is used
> for StackTraceElement toString() as documented at
> https://docs.oracle.com/javase/9/docs/api/java/lang/StackTraceElement.ht
> ml#toString--.
> So there may be value in keeping it. I will address this as well in
> JDK-8169559.
>
> Thanks,
> Lois
>
> >
> > Best regards,
> > Goetz.
> >
> >> -----Original Message-----
> >> From: mandy chung [mailto:mandy.chung at oracle.com]
> >> Sent: Donnerstag, 7. Juni 2018 19:49
> >> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; Lois Foltan
> >> <lois.foltan at oracle.com>
> >> Cc: hotspot-runtime-dev at openjdk.java.net
> >> Subject: Re: RFR(M): 8199940: Print more information about class loaders
> in
> >> IllegalAccessErrors.
> >>
> >> Hi Goetz,
> >>
> >> We have discussed several options to include the loader info that
> >> developers reading the exception message can easily tell the
> >> problem and reason. We look at a few exception messages and
> >> like the following most:
> >>
> >> class test.IAE1_B cannot access its superinterface test.IAE1_A
> >> (test.IAE1_B in unnamed module of loader
> com.acme.MySameClassLoader
> >> @423aefd2; test.IAE1_A in unnamed module of loader 'app')
> >>
> >> class p1.C1 cannot access private method p2.C2.method2()V
> >> (p1.C1 in module m1x at 2.0 of loader 'app'; p2.C2 in module m2x at 9.0 of
> >> loader 'app')
> >>
> >> class p.C cannot access class jdk.internal.misc.VM (p.C in unnamed
> >> module of loader 'Cool lib loader' @4567; jdk.internal.misc.VM in module
> >> java.base; java.base does not export jdk.internal.misc to the unnamed
> >> module)
> >>
> >> loader constraint violation for type pkg.Foo:
> >> class pkg.Child tried to access pkg.Parent._field1, a field of type
> >> pkg.Foo, but pkg.Child and pkg.Parent see different definitions of
> >> pkg.Foo
> >> (pkg.Child in unnamed module of loader
> pkg.ClassLoaderForChildGrandFoo
> >> @123, parent loader 'app'; pkg.Parent in unnamed module of loader
> >> pkg.ClassLoaderForParentFoo @456, parent loader 'app')
> >>
> >> Below describes the preliminary proposal of the format.
> >>
> >> If the loader name is explicitly specified then
> >> ... of loader '<name>' @<id>
> >>
> >> If the loader name is not explicitly specified
> >> ... of loader <qualified-type-name> @<id>
> >>
> >> - single-quote denotes it's explicitly specified loader name.
> >> The loader name explicitly specified may contain whitespace.
> >>
> >> - @<id> can distinct different instances with the same loader name
> >> or of the same type.
> >>
> >> - omit @<id> for built-in loaders
> >>
> >> Your feedback is appreciated.
> >>
> >> Lois is on vacation. I think it may be best for her to take this RFE
> >> and implement the new format once we agree on the proposal as this
> >> would need to update some exception wordings to make the problem
> >> and reason very clear.
> >>
> >> Mandy
More information about the hotspot-runtime-dev
mailing list