RFR: 8298065: Provide more information in message of NoSuchFieldError [v4]
Matias Saavedra Silva
matsaave at openjdk.org
Fri Dec 23 18:19:53 UTC 2022
On Thu, 22 Dec 2022 23:23:18 GMT, Ioi Lam <iklam at openjdk.org> wrote:
>> Matias Saavedra Silva has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Improved style and cleanup
>
> src/hotspot/share/runtime/signature.cpp line 455:
>
>> 453: strncat(buf, "[]", strlen(buf));
>> 454: buf[strlen(buf)] = '\0';
>> 455: }
>
> Java array dimensions can be up to 255, so the `buf` is not long enough.
>
> Anyway, I think we already have code that can translate a signature like `[I` to the source code form of `int []`. Try this:
>
>
> super class Foofoo
> version 63:0
> {
> public static Method main:"([Ljava/lang/String;)V"
> stack 30 locals 3
> {
> iconst_0;
> iconst_0;
> aconst_null;
> invokestatic Method "xxx":"(II[I)V";
> return;
> }
> }
>
> $ java -cp . Foofoo
> Exception in thread "main" java.lang.NoSuchMethodError: 'void Foofoo.xxx(int, int, int[])'
> at Foofoo.main(Foofoo.jasm)
>
>
> Writing such conversion is very difficult. You should try to use the existing code (refactoring it as necessary).
After a while of searching I was unable to find anything that could easily provide this type of information. The closest example is Signature::print_as_signature_external_return_type, but this does not work with fields.
-------------
PR: https://git.openjdk.org/jdk/pull/11745
More information about the hotspot-runtime-dev
mailing list