[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-compiler-dev
Subject:    [PATCH] Re: False positive compilation of a method reference with type parameters
From:       Nikita Eshkeev <neshkeev () yandex ! ru>
Date:       2020-01-23 14:00:25
Message-ID: 5800981579788025 () myt2-508c8f44300a ! qloud-c ! yandex ! net
[Download RAW message or body]

# HG changeset patch<br /><div class="49d322fa18fbd16bb206f61f9a2a40f7normalize"><div><p># User neshkeev<br /># Date <span class="177d5a4333ac019606de889e143743a1wmi-callto">1579367144 -10800</span><br />#      Sat Jan 18 20:05:44 2020 +0300<br /># Node ID 2ccc63b8e786adc0230a25a69c7eee3ba3f54d7b<br /># Parent  5dae0969decc5ef795cb591fa83d5abb69e9cfaa<br />Fix false-positive compilation of method references with type parameters<br />Summary: This patch makes MethodReferenceLookupHelper#lookup to favor precedence of explicitly defined type parameters of a method reference over type arguments of the SAM the method reference is bound<br />Contributed-by: Nikita Eshkeev&lt;neshkeev at yandex.ru&gt;<br /><br />diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java<br />--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java<br />+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java<br />@@ -3401,6 +3401,15 @@<br /><br />         @Override<br />         final Symbol lookup(Env&lt;AttrContext&gt; env, MethodResolutionPhase phase) {<!-- --><br />+            final List&lt;Type&gt; argtypes;<br />+<br />+            final List&lt;JCExpression&gt; typeArguments = referenceTree.getTypeArguments();<br />+            if ((typeArguments != null) &amp;&amp; typeArguments.nonEmpty()) {<!-- --><br />+                argtypes = this.referenceTree.getTypeArguments().map(e -&gt; e.type);<br />+            } else {<!-- --><br />+                argtypes = this.argtypes;<br />+            }<br />+<br />             return findMethod(env, site, name, argtypes, typeargtypes,<br />                     phase.isBoxingRequired(), phase.isVarargsRequired());<br />         }<br /><br /></p></div></div><div class="fac59074051ae5ed40c8811da5d24da6js-compose-signature"></div><div><br /></div>
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic