[foreign] RFR 8218678: Binder does not understand wildcard in generic carriers
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Fri Feb 8 15:56:15 UTC 2019
Hi,
this issue has been discovered by Sundar (thanks!) when playing with
sqlite3.
We have recently improved the jextract codebase in order to generate
wildcards for nested pointer and arrays. Unfortunately, the binder gives
up when parsing generic signature types containing wildcard type parameters.
This patch fixes that. As you can see the fix is not exactly trivial -
WildcardType has both upper bounds and lower bounds arrays. In reality
the lower bound is either null or a one element array (in the case of '?
super' wildcard). The upper bound is _at least_ a one element array. The
first element can be j.l.Object or not, but typically is a class type.
So we have X cases:
* there is one lower bound - easy, then this is a ? super T wildcard and
the type argument is T
* there is one upper bound - we have two subcases:
- the upper bound is j.l.Object - uninteresting, we should treat as
if no type-argument was found
- otherwise, the upper bound is some other type T, return that as
the type argument
* there are 2 upper bounds, and the first is j.l.Object - this
corresponds to '? super I' where I is an interface, return I as the
type-argument
* otherwise, we have multiple upper/lower bounds - in which case we
should throw; jextract will never generate something like this, and I
believe the user won't write something like it either :-)
http://cr.openjdk.java.net/~mcimadamore/panama/8218678/
Cheers
Maurizio
More information about the panama-dev
mailing list