docs: public void execute(@Nonnull Runnable task, final ResourceActivity activity ) throws InterruptedException {
          final ResourceList resources = activity.getResourceList();
          _withLock(new NotReallyRoleSensitiveCallable<Void,InterruptedException>() {
              @Override
              public Void call() throws InterruptedException {
                  while (inUse.isCollidingWith(resources)) {
                      // TODO revalidate the resource list after re-acquiring lock, for now we just let the build fail
                      _await();
                  }
  
                  // we have a go
                  inProgress.add(activity);
                  inUse = ResourceList.union(inUse, resources);
                  return null;
              }
          });
  
          try {
              task.run();
          } finally {
             // TODO if AsynchronousExecution, do that later
              _withLock(new Runnable() {
                  @Override
                  public void run() {
                      inProgress.remove(activity);
                      inUse = ResourceList.union(resourceView);
                      _signalAll();
                  }
              });
          }
      }