@Override public ListenableFuture<Map<String, Object>> getNodeJob( final Cell cell, final BuildTarget buildTarget) throws BuildTargetException { return Futures.transformAsync( getAllNodesJob(cell, cell.getAbsolutePathToBuildFile(buildTarget)), input -> { for (Map<String, Object> rawNode : input) { Object shortName = rawNode.get("name"); if (buildTarget.getShortName().equals(shortName)) { return Futures.immediateFuture(rawNode); } } throw NoSuchBuildTargetException.createForMissingBuildRule( buildTarget, BuildTargetPatternParser.forBaseName(buildTarget.getBaseName()), cell.getBuildFileName(), "Defined in file: " + cell.getAbsolutePathToBuildFile(buildTarget)); }, executorService); }