/** * Creates both normal and scheduling middlemen. * * <p>Note: there's no need to synchronize this method; the only use of a field is via a call to * another synchronized method (getArtifact()). * * @return null iff {@code inputs} is null or empty; the middleman file and the middleman action * otherwise */ private Pair<Artifact, Action> createMiddleman( ActionOwner owner, String middlemanName, String purpose, Iterable<Artifact> inputs, Root middlemanDir, MiddlemanType middlemanType) { if (inputs == null || Iterables.isEmpty(inputs)) { return null; } Artifact stampFile = getStampFileArtifact(middlemanName, purpose, middlemanDir); Action action = new MiddlemanAction(owner, inputs, stampFile, purpose, middlemanType); actionRegistry.registerAction(action); return Pair.of(stampFile, action); }