[jdk16] Integrated: 8231461: static/instance overload leads to 'unexpected static method found in unbound lookup' when resolving method reference
Vicente Romero
vromero at openjdk.java.net
Wed Jan 13 17:30:04 UTC 2021
On Tue, 12 Jan 2021 02:21:31 GMT, Vicente Romero <vromero at openjdk.org> wrote:
> This patch fixes the following issue, for code like:
> import java.util.function.*;
>
> public class Test {
> public String foo(Object o) { return "foo"; }
> public static String foo(String o) { return "bar"; }
>
> public void test() {
> Function<String, String> f = Test::foo;
> }
> }
> javac is issuing an invalid method reference error even though the static method is applicable. This is due to a regression on the implementation of the following assertion on section 15.13.1 of the JLS 14:
>
> If the first search produces a most specific method that is static , and the set
> of applicable methods produced by the second search contains no non- static
> methods, then the compile-time declaration is the most specified method of
> the first search.
>
> Apart from fixing the mentioned regression, this patch also adds a debug feature for the compiler to print out the findings during the search for an applicable method reference. The information is printed out if a debug flag is passed to the compiler.
>
> TIA
This pull request has now been integrated.
Changeset: ac4cd2e3
Author: Vicente Romero <vromero at openjdk.org>
URL: https://git.openjdk.java.net/jdk16/commit/ac4cd2e3
Stats: 317 lines in 8 files changed: 314 ins; 0 del; 3 mod
8231461: static/instance overload leads to 'unexpected static method found in unbound lookup' when resolving method reference
Reviewed-by: mcimadamore
-------------
PR: https://git.openjdk.java.net/jdk16/pull/107
More information about the compiler-dev
mailing list