[11u] RFR: 8193367: Annotated type variable bounds crash javac

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Mon Jul 20 13:10:58 UTC 2020


Hi Thomas

Matthias pushed his change, and now this one applies with Copyright
changes only.
http://cr.openjdk.java.net/~goetz/wr20/8193367-ann_type_var-jdk11/02/

Thanks for pointing me to this!

Best regards,
  Goetz


From: Thomas Stüfe <thomas.stuefe at gmail.com>
Sent: Monday, July 20, 2020 10:35 AM
To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>
Cc: jdk-updates-dev at openjdk.java.net
Subject: Re: [11u] RFR: 8193367: Annotated type variable bounds crash javac

Hi Goetz,

true.

The behaviour was changed with https://bugs.openjdk.java.net/browse/JDK-8213703
(JDK-8213703 "LambdaConversionException: Invalid receiver type not a subtype of implementation type interface")

Matthias as a backport request open for that one, maybe wait with this downport until Matthias is done?

Cheers, Thomas


On Mon, Jul 20, 2020 at 10:07 AM Lindenmaier, Goetz <goetz.lindenmaier at sap.com<mailto:goetz.lindenmaier at sap.com>> wrote:
Hi Thomas,

Yes, that is true.
But this change is about retrieving the bounds.
The difference you point out is not addressed by the
change downported.   I would say the downport is
correct because I do preserve the old behavior wrt.
the kind.

Best regards,
  Goetz.




From: Thomas Stüfe <thomas.stuefe at gmail.com<mailto:thomas.stuefe at gmail.com>>
Sent: Monday, July 20, 2020 10:01 AM
To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com<mailto:goetz.lindenmaier at sap.com>>
Cc: jdk-updates-dev at openjdk.java.net<mailto:jdk-updates-dev at openjdk.java.net>
Subject: Re: [11u] RFR: 8193367: Annotated type variable bounds crash javac

Hi Goetz,

LambdaToMethod.java:

Your version:

2358             boolean interfaceParameterIsIntersectionOrUnionType() {

2359                 List<Type> tl = tree.getDescriptorType(types).getParameterTypes();

2360                 for (; tl.nonEmpty(); tl = tl.tail) {

2361                     Type pt = tl.head;

2362                     switch (pt.getKind()) {

2363                         case INTERSECTION:

2364                         case UNION:

2365                             return true;

2366                         case TYPEVAR:

2367                             TypeVar tv = (TypeVar) pt;

2368                             if (tv.getUpperBound().getKind() == TypeKind.INTERSECTION) {

2369                                 return true;

2370                             }

2371                     }

2372                 }

2373                 return false;

2374             }

does not seem equivalent to the original version:


boolean isIntersectionOrUnionType(Type t) {
    switch (t.getKind()) {
        case INTERSECTION:
        case UNION:
            return true;
        case TYPEVAR:
            TypeVar tv = (TypeVar) t;
            return isIntersectionOrUnionType(tv.getUpperBound());
    }
    return false;
}

for cases where tv.getUpperBound().kind == UNION. Yours returns false, original returns true.



Best Regards, Thomas







On Sun, Jul 19, 2020 at 12:27 PM Lindenmaier, Goetz <goetz.lindenmaier at sap.com<mailto:goetz.lindenmaier at sap.com>> wrote:
Hi

I am downporting this for 11.0.9-oracle parity.
I had to resolve 3 files. 2 are copyrights.
In LambdaToMethod.java, 11 compares with INTERSECTION,
where the original calls a method. The selection of the bounds field
is similar though, and was easy to adapt.

http://cr.openjdk.java.net/~goetz/wr20/8193367-ann_type_var-jdk11/01/

Please review.

https://bugs.openjdk.java.net/browse/JDK-8193367
http://hg.openjdk.java.net/jdk/jdk/rev/a772e65727c5

Best regards,
  Goetz.


More information about the jdk-updates-dev mailing list