All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snapscript.core.type.index.MethodHandleBuilder Maven / Gradle / Ivy

package org.snapscript.core.type.index;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class MethodHandleBuilder {

   private static final String ALLOWED_MODES = "allowedModes";
   
   private final Method method;

   public MethodHandleBuilder(Method method) {
      this.method = method;
   }
   
   public MethodHandle create() throws Exception {
      Class target = method.getDeclaringClass();
      Lookup lookup = MethodHandles.lookup();
      Lookup actual = lookup.in(target);
      Class access = lookup.getClass();
      Field modes = access.getDeclaredField(ALLOWED_MODES);
      
      modes.setAccessible(true);
      modes.set(actual, Modifier.PRIVATE);
      
      return actual.unreflectSpecial(method, target);
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy