On Thu, 28 Mar 2024 22:12:49 GMT, Alex Menkov <amen...@openjdk.org> wrote:

> PreserveAllAnnotations option causes class file parser to preserve 
> RuntimeInvisibleAnnotations so VM considers them as RuntimeVisibleAnnotations.
> For class retransformation JvmtiClassFileReconstituter restores all 
> annotations as RuntimeVisibleAnnotations attributes.
> This can cause problem is the class contains only 
> RuntimeInvisibleAnnotations, so corresponding RuntimeVisibleAnnotations 
> attribute name is not present in the class constant pool.
> 
> Correct solution would be to store additional information about 
> RuntimeInvisibleAnnotations and restore them exactly as they were in the 
> original class (this should be done for all annotations: 
> RuntimeInvisibleAnnotations/RuntimeInvisibleTypeAnnotations for class, fields 
> and records, 
> RuntimeInvisibleAnnotations/RuntimeInvisibleTypeAnnotations/RuntimeInvisibleParameterAnnotations
>  for methods; need to ensure the information is correctly updated during 
> class redefinition & retransformation).
> 
> I think it doesn't make sense to add all the complexity for almost no value 
> (I doubt anyone uses PreserveAllAnnotations, the flag looks like 
> experimental, we don't have any tests for it).
> 
> The suggested fix adds workaround for this corner case - if "visible" 
> attribute name is not in the CP, the annotations are restored with 
> "invisible" attribute name.
> 
> Testing:
>   - tier1,tier2,hs-tier5-svc
>   - all java/lang/instrument tests;
>   - all RedefineClasses/RetransformClasses tests

This pull request has now been integrated.

Changeset: f88f31dc
Author:    Alex Menkov <amen...@openjdk.org>
URL:       
https://git.openjdk.org/jdk/commit/f88f31dcbf80e9a4cd3ba9d34be8b88128af97c6
Stats:     33 lines in 3 files changed: 22 ins; 0 del; 11 mod

8328137: PreserveAllAnnotations can cause failure of class retransformation

Reviewed-by: coleenp, sspitsyn

-------------

PR: https://git.openjdk.org/jdk/pull/18540

Reply via email to