On Sat, 31 Oct 2020 21:11:15 GMT, Rafael Winterhalter
<[email protected]> wrote:
>> A method's or constructor's owner type might carry annotations on its
>> potential type parameters but is never represented as parameterized type
>> what makes these parameters inaccessible at runtime, despite the presence of
>> parameter type annotations.
>
> 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.
Hi Rafael,
Thanks for your patience and for the patch, I left a few comments.
src/java.base/share/classes/java/lang/reflect/Constructor.java line 664:
> 662: Type t;
> 663: if (o != null || v.length > 0) {
> 664: t = ParameterizedTypeImpl.make(enclosingClass, v, o);
I think these should be instantiated by a GenericsFactory. Ideally you
shouldn't have to import the reflective object directly.
src/java.base/share/classes/java/lang/reflect/Constructor.java line 660:
> 658: }
> 659:
> 660: TypeVariable<?>[] v = enclosingClass.getTypeParameters();
Can you push down most or all of this to resolveOwner? It can then either
return a Class instance or an appropriate Type instance.
src/java.base/share/classes/java/lang/reflect/Executable.java line 699:
> 697: }
> 698: Class<?> c = getDeclaringClass();
> 699: TypeVariable<?>[] v = c.getTypeParameters();
Same here, can this be pushed down to a common method that either returns a
Class or resolves the appropriate Type instance?
test/jdk/java/lang/annotation/typeAnnotations/TestReceiverTypeParameterizedConstructor.java
line 52:
> 50: Inner(TestReceiverTypeParameterizedConstructor<@TypeAnnotation T>
> TestReceiverTypeParameterizedConstructor.this) { }
> 51: }
> 52:
It might be good to add a case where the annotated type variable isn't on the
immediate outer type like:
class Inner2 {
class TwiceInner {
TwiceInner(TestReceiverTypeParameterizedConstructor<@TypeAnnotation
T>.Inner2 TestReceiverTypeParameterizedConstructor.Inner2.this) { }
}
}
Same for the method test.
-------------
PR: https://git.openjdk.java.net/jdk/pull/851