Package java.lang.invoke

Examples of java.lang.invoke.MethodHandle


      String selector) {
    super(lookup, type, selector);
  }

  protected MethodHandle findMethodForNil() {
    MethodHandle methodHandle = ImageBootstrapper.systemMapping
        .methodHandleForNil_(selector);
    if (methodHandle == null) {
      return createDNUHandleForNil();
    }
    MethodHandle castHandle = methodHandle.asType(type);
    return castHandle;
  }
View Full Code Here


    MethodHandle castHandle = methodHandle.asType(type);
    return castHandle;
  }

  protected MethodHandle findMethod(final Class receiverClass) {
    MethodHandle methodHandle = ImageBootstrapper.systemMapping
        .methodHandleFor_methodName_(receiverClass, selector);
    if (methodHandle == null) {
      methodHandle = createDNUHandle(receiverClass);
    }
    MethodHandle castHandle = methodHandle.asType(type);
    return castHandle;
  }
View Full Code Here

    MethodHandle castHandle = methodHandle.asType(type);
    return castHandle;
  }

  public MethodHandle createDNUHandleForNil() {
    MethodHandle dnuHandle = ImageBootstrapper.systemMapping
        .methodHandleForNil_("doesNotUnderstand_arguments_");
    return wrapDNUHandle(dnuHandle);
  }
View Full Code Here

        .methodHandleForNil_("doesNotUnderstand_arguments_");
    return wrapDNUHandle(dnuHandle);
  }

  public MethodHandle createDNUHandle(final Class receiverClass) {
    MethodHandle dnuHandle = ImageBootstrapper.systemMapping
        .methodHandleFor_methodName_(receiverClass,
            "doesNotUnderstand_arguments_");
    return wrapDNUHandle(dnuHandle);
  }
View Full Code Here

  protected final MethodHandles.Lookup lookup;
  protected final MethodType type;

  public MethodHandle wrapDNUHandle(MethodHandle dnuHandle) {
    Symbol sym = selectorConverter.functionNameAsSelector_(selector);
    MethodHandle withBoundSymbol = MethodHandles.insertArguments(dnuHandle,
        1, sym);
    MethodHandle message = withBoundSymbol.asCollector(Object[].class,
        numArgs());
    return message;
  }
View Full Code Here

  private MethodHandle getFallbackMethod() {
    try {
      final MethodType fallbackType = MethodType.genericMethodType(
          type.parameterCount()).insertParameterTypes(0,
          BaseCallSite.class);
      final MethodHandle fallbackHandle = MethodHandles.insertArguments(
          MethodHandles.lookup().findStatic(BaseCallSite.class,
              "invocationFallback", fallbackType), 0, this);
      return fallbackHandle.asType(type);
    } catch (NoSuchMethodException | IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }
View Full Code Here

  protected void addTargetToCache(Object receiver) {
    setTarget(findFieldAccess(receiver.getClass()));
  }

  protected MethodHandle findFieldAccess(Class receiverClass) {
    MethodHandle access = findAccessOrNil(receiverClass);
    if (access == null)
      throw new RuntimeException("Access not found");
    return access.asType(type);
  }
View Full Code Here

    return access.asType(type);
  }

  protected MethodHandle findAccessOrNil(Class receiverClass) {
    // Try to find the highest defined access
    MethodHandle found = null;
    Class cl = receiverClass;
    while (cl != null) {
      MethodHandle sFound = localFindAccessOrNil(cl);
      if (sFound != null)
        found = sFound;
      cl = cl.getSuperclass();
    }
    return found;
View Full Code Here

  public static MethodHandle getHandle(Object receiver, String selectorString) {
    return getHandle(receiver, Symbol.value(selectorString));
  }

  public static MethodHandle getHandle(Object receiver, Symbol selector) {
    MethodHandle methodHandle;
    String methodName = selectorConverter.selectorAsFunctionName_(selector);

    if (receiver == null) {
      methodHandle = ImageBootstrapper.systemMapping
          .methodHandleForNil_(methodName);
View Full Code Here

    return methodHandle;
  }

  public static Object perform(Object receiver, Symbol selector)
      throws Throwable {
    MethodHandle handle = getHandle(receiver, selector);
    return handle.invoke(receiver);
  }
View Full Code Here

TOP

Related Classes of java.lang.invoke.MethodHandle

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.