@Override
  @SuppressWarnings("DuplicatedCode")
  public @Nullable T getValue() {
    boolean computed = myComputed;
    T value = myValue;
    if (!computed) {
      RecursionGuard.StackStamp stamp = RecursionManager.markStack();
      value = compute();
      if (stamp.mayCacheNow()) {
        myValue = value;
        myComputed = true;
      }
    }
    return value;
  }
@Override
  @SuppressWarnings("DuplicatedCode")
  public @Nullable T getValue()