@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); } }
@Override public void clear() { generatingActionMap.clear(); }
@Override @Nullable public Action getGeneratingAction(Artifact artifact) { return generatingActionMap.get(artifact); }