@Contract(pure = true)
  static <P, T> @NotNull LeafOccurrenceMapper<T> withPointer(@NotNull Pointer<? extends P> pointer,
                                                             @NotNull Parameterized<? super @NotNull P, ? extends T> parameterizedMapper) {
    return occurrence -> {
      P value = pointer.dereference();
      return value == null ? Collections.emptyList()
                           : parameterizedMapper.mapOccurrence(value, occurrence);
    };
  }
@Contract(pure = true)
  static <P, T> @NotNull LeafOccurrenceMapper<T> withPointer(@NotNull Pointer<? extends P> pointer,
                                                             @NotNull Parameterized<? super @NotNull P, ? extends T> parameterizedMapper)