@Override
 public void registerAction(Action action) throws ActionConflictException {
   for (Artifact artifact : action.getOutputs()) {
     Action previousAction = generatingActionMap.putAndGet(artifact, action);
     if (previousAction != null
         && previousAction != action
         && !Actions.canBeShared(action, previousAction)) {
       generatingActionMap.remove(artifact, action);
       throw new ActionConflictException(artifact, previousAction, action);
     }
   }
 }
 @Override
 public void unregisterAction(Action action) {
   for (Artifact artifact : action.getOutputs()) {
     generatingActionMap.remove(artifact, action);
     Action otherAction = generatingActionMap.get(artifact);
     Preconditions.checkState(
         otherAction == null
             || (otherAction != action && Actions.canBeShared(action, otherAction)),
         "%s %s",
         action,
         otherAction);
   }
 }