@Override
  public T get(Key<T> a, Owner owner, Param p) {
    T value = owner.getUserData(a);
    if (value == null) {
      RecursionGuard.StackStamp stamp = RecursionManager.markStack();
      value = compute(owner, p);
      if (stamp.mayCacheNow()) {
        value = ((UserDataHolderEx)owner).putUserDataIfAbsent(a, value);
      }
    }
    return value;
  }
@Override
  public T get(Key<T> a, Owner owner, Param p)