org.snapscript.core.type.index.MethodHandleBinder Maven / Gradle / Ivy
package org.snapscript.core.type.index;
import java.lang.invoke.MethodHandle;
import java.lang.reflect.Method;
import java.util.concurrent.atomic.AtomicReference;
public class MethodHandleBinder {
private final AtomicReference reference;
private final MethodHandleBuilder builder;
public MethodHandleBinder(Method method) {
this.reference = new AtomicReference();
this.builder = new MethodHandleBuilder(method);
}
public MethodHandle bind(Object left) throws Exception {
MethodHandle handle = reference.get();
if(handle == null) {
handle = builder.create();
reference.set(handle);
}
return handle.bindTo(left);
}
}