synchronized <T extends Object> NativeClosureFactory<T> getClosureFactory(Class<T> closureClass) {
    NativeClosureFactory<T> factory = factories.get(closureClass);
    if (factory != null) {
      return factory;
    }

    factory = NativeClosureFactory.newClosureFactory(runtime, closureClass, typeMapper);
    factories.put(closureClass, factory);

    return factory;
  }
    public Pointer toNative(T value, ToNativeContext context) {
      NativeClosureFactory.ClosureReference ref = closureReference;
      if (ref != null && ref.getCallable() == value) {
        return ref.getPointer();
      }

      ref = factory.getClosureReference(value);
      if (closureReference == null || closureReference.get() == null) {
        closureReference = ref;
      }

      return ref.getPointer();
    }