RFR: 8263763: Synthetic constructor parameters of enum are not considered for annotation indices [v2]

Joe Darcy darcy at openjdk.java.net
Fri Apr 9 21:35:32 UTC 2021


On Fri, 19 Mar 2021 15:20:00 GMT, Rafael Winterhalter <winterhalter at openjdk.org> wrote:

>> 8263763: The constructor of an enumeration prefixes with two synthetic arguments for constant name and ordinal index. For this reason, the constructor annotations need to be shifted two indices to the right, such that the annotation indices match with the parameter indices.
>
> Rafael Winterhalter has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR.

Marked as reviewed by darcy (Reviewer).

src/java.base/share/classes/java/lang/reflect/Constructor.java line 612:

> 610:         Class<?> declaringClass = getDeclaringClass();
> 611:         if (
> 612:             declaringClass.isEnum()

Please format as
if (declaringClass.isEnum()) {
...

test/jdk/java/lang/annotation/EnumConstructorAnnotation.java line 39:

> 37:     public static void main(String[] args) {
> 38:         Constructor<?> c = SampleEnum.class.getDeclaredConstructors()[0];
> 39:         Annotation[] a = c.getParameters()[2].getAnnotations();

The value of c.getParameters().getAnnotations() can be checked for consistency against c.getParameterAnnotations(). (The type java.lang.reflect.Parameter was added several releases after annotations were added.)

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

PR: https://git.openjdk.java.net/jdk/pull/3082


More information about the core-libs-dev mailing list