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