@Override
  public <T extends JpsElement, P, K extends JpsElementChildRole<T> & JpsElementParameterizedCreator<T, P>> T getOrSetChild(@NotNull K role, @NotNull Supplier<P> param) {
    synchronized (myDataLock) {
      final T cached = (T)myElements.get(role);
      if (cached != null) {
        return cached;
      }
      return putChild(role, role.create(param.get()));
    }
  }
@Override
  public <T extends JpsElement, P, K extends JpsElementChildRole<T> & JpsElementParameterizedCreator<T, P>> T getOrSetChild(@NotNull K role, @NotNull Supplier<P> param)