[9] RFR (S) 8057656: Improve MethodType.isCastableTo() & MethodType.isConvertibleTo() checks

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Sep 5 16:42:58 UTC 2014


 >> http://cr.openjdk.java.net/~vlivanov/8057656/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8057656
>>
>
>   854         if (!canConvert(returnType(), newType.returnType()))
>   855             return false;
>   856         Class<?>[] srcTypes = newType.ptypes;
>   857         Class<?>[] dstTypes = ptypes;
>
> Are the src and dst the wrong way around?
>
>     srcTypes = ptypes
>     dstTypes = newType.ptypes
No, they are right. Parameters and return type conversions have opposite 
directions.

>   896     private static boolean canCast(Class<?> src, Class<?> dst) {
>   897         if (src.isPrimitive() && !dst.isPrimitive()) {
>   898             if (dst == Object.class || dst.isInterface())  return true;
>
> How come if the src is primitive and the dst is an interface it returns true for any interface? I guess there are subtly different rules here for casting and conversion.
There are 2 types of converstions: MH.asType() and 
MHs.explicitCastArguemnts() with more relaxed semantics.
One of the differences is that interfaces are coerced to Object, since 
verifier allows any interface to be treated as Object.

Your questions reminded me about related changes waiting in the queue 
and I decided to include then here.

Updated webrev:
http://cr.openjdk.java.net/~vlivanov/8057656/webrev.01/

Got rid of MT.isCastableTo(). MHs.explicitCastEquivalentToAsType() is 
used instead. Also, it has detailed overview of differences between 
MT.asType() and MHs.explicitCastArguments().

Best regards,
Vladimir Ivanov

>
> Paul.
>
>> There are some corner cases which MT.isCastableTo() & MT.isConvertibleTo() don't treat right (e.g. int->String converstion of return type in MT.isCastableTo()).
>>
>> Testing: jdk/java/lang/invoke, jdk/java/util/streams, nashorn, octane w/ "-ea -esa" and COMPILE_THRESHOLD={0,30}.
>>
>> Reviewed-by: vlivanov, ?
>> Contributed-by: john.r.rose at oracle.com
>>
>> Thanks!
>>
>>
>> Best regards,
>> Vladimir Ivanov
>


More information about the mlvm-dev mailing list