[jdk16] RFR: 8231461: static/instance overload leads to 'unexpected static method found in unbound lookup' when resolving method reference
Vicente Romero
vromero at openjdk.java.net
Tue Jan 12 02:26:09 UTC 2021
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
-------------
Commit messages:
- adding diagnostics tests
- updating test
- renaming test file
- Merge branch 'master' into JDK-8231461
- Merge branch 'master' into JDK-8231461
- 8231461: static/instance overload leads to 'unexpected static method found in unbound lookup' when resolving method reference
Changes: https://git.openjdk.java.net/jdk16/pull/107/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk16&pr=107&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8231461
Stats: 300 lines in 8 files changed: 297 ins; 0 del; 3 mod
Patch: https://git.openjdk.java.net/jdk16/pull/107.diff
Fetch: git fetch https://git.openjdk.java.net/jdk16 pull/107/head:pull/107
PR: https://git.openjdk.java.net/jdk16/pull/107
More information about the compiler-dev
mailing list