"In the first search, the method reference is treated as if it were an invocation with argument expressions of types P1 , ..., Pn; [...]
In the second search, if P1 , ..., Pn is not empty and P1 is a subtype of ReferenceType, then the method reference expression is treated as if it were a method invocation expression with argument expressions of types P2, ..., Pn. [...]
If the first search produces a static method, and no non- static method is applicable [...] during the second search, then the compile-time declaration is the result of the first search.
Otherwise, if no static method is applicable [...] during the first search, and the second search produces a non-static method, then the compile-time declaration is the result of the second search."