import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.invoke.VarHandle;
class SignaturePolymorphic {
public static void main(String... args) throws Throwable {
// signature polymorphic methods allow any lookup, do not warn
MethodHandles.lookup().findVirtual(MethodHandle.class, "invoke", MethodType.methodType(int.class, String.class, double.class));
MethodHandles.lookup().findVirtual(VarHandle.class, "compareAndSet", MethodType.methodType(int.class, String.class, double.class));
// static lookup still warns as the methods are virtual
MethodHandles.lookup().findStatic(MethodHandle.class, "invoke", MethodType.methodType(int.class, String.class, double.class));
MethodHandles.lookup().findStatic(VarHandle.class, "compareAndSet", MethodType.methodType(int.class, String.class, double.class));
// unrelated methods in the relevant classes cause warnings
MethodHandles.lookup().findVirtual(MethodHandle.class, "toString", MethodType.methodType(int.class, String.class, double.class));
MethodHandles.lookup().findVirtual(VarHandle.class, "toString", MethodType.methodType(int.class, String.class, double.class));
}
}