@Override
  public <T> T getUserData(@NotNull Key<T> key) {
    T t = getUserMap().get(key);
    if (t == null && key instanceof KeyWithDefaultValue) {
      t = putUserDataIfAbsent(key, ((KeyWithDefaultValue<T>)key).getDefaultValue());
    }
    return t;
  }
@Override
  public <T> T getUserData(@NotNull Key<T> key)