question about JDK-8063054 (incorrect raw type warnings for method references)

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Sat Aug 5 05:19:29 UTC 2017


You are right - I think we've got distracted by other things. I will 
make sure this makes into the jdk10 repo.

Cheers
Maurizio


On 04/08/17 18:16, Liam Miller-Cushon wrote:
> Friendly ping - it doesn't look like this fix ever got merged. Did you 
> run into problems with the approach?
>
> On Fri, Mar 24, 2017 at 9:26 AM, Maurizio Cimadamore 
> <maurizio.cimadamore at oracle.com 
> <mailto:maurizio.cimadamore at oracle.com>> wrote:
>
>
>
>     On 24/03/17 15:56, B. Blaser wrote:
>
>         Hi Maurizio,
>
>         On 23 March 2017 at 12:58, Maurizio Cimadamore
>         <maurizio.cimadamore at oracle.com
>         <mailto:maurizio.cimadamore at oracle.com>> wrote:
>
>             Hi Bernard,
>
>             [...]
>
>             I think the lines in bold are the ones we need to pay
>             attention to; in other
>             words, if the receiver type is raw and the type of the
>             first search is
>             identical to the type of the second search, then it means
>             no inference
>             occurred. I think something like this could easily be
>             achieved w/o any
>             visitors, with something like this:
>
>                              if (that.getMode() == ReferenceMode.INVOKE &&
>              TreeInfo.isStaticSelector(that.expr, names) &&
>                                      that.kind.isUnbound() &&
>              types.isSameTypes(lookupHelper.site, that.expr.type)
>             {
>                                  chk.checkRaw(that.expr, localEnv);
>                              }
>
>             I did some quick tests and this simple patch seems to
>             remove the undesired
>             warnings in the examples we have seen so far, but retains
>             them where they
>             are truly deserved. What do you think?
>
>             Maurizio
>
>         Fine, nice solution... I would simply rewrite it as follows (
>         lookupHelper.site.isRaw() ):
>
>                          if (that.getMode() == ReferenceMode.INVOKE &&
>                                  TreeInfo.isStaticSelector(that.expr,
>         names) &&
>                                  that.kind.isUnbound() &&
>                                  lookupHelper.site.isRaw()) {
>                              chk.checkRaw(that.expr, localEnv);
>                          }
>
>         This would avoid some redundant checks if "ReferenceType"
>         isn't raw (I
>         think), for example:
>
>         class Test10 {
>              interface Consumer<T> { void accept(T arg); }
>              interface Parent<P> { void foo(); }
>              interface Child extends Parent<String> {}
>              static <T> void m(T arg, Consumer<T> f) {}
>              public void test(Child c) { m(c, Parent<String>::foo); }
>         }
>
>         Here, "types.isSameType(lookupHelper.site, that.expr.type)" would
>         verify if "Parent<String> == Parent<String>" and then
>         "chk.checkRaw()"
>         would check if "Parent<String>" is raw...
>
>         But, at first sight, this looks good. I'll try to do some more
>         testing...
>
>         What do you think of this small rewriting?
>
>     Yeah - I think that could work too (not that I'm too worried about
>     performances here - we're outside overload resolution at this stage).
>
>     Maurizio
>
>
>         Bernard
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20170804/3d01861a/attachment.html>


More information about the compiler-dev mailing list