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