+
+ private static final class GenerationTask {
+ private final BuildContext buildContext;
+ private final Supplier<String> contentSupplier;
+ private final File target;
+
+ GenerationTask(final BuildContext buildContext, final File target, final Supplier<String> contentSupplier) {
+ this.buildContext = requireNonNull(buildContext);
+ this.target = requireNonNull(target);
+ this.contentSupplier = requireNonNull(contentSupplier);
+ }
+
+ File generateFile() {
+ try {
+ try (OutputStream stream = buildContext.newFileOutputStream(target)) {
+ try (Writer fw = new OutputStreamWriter(stream, StandardCharsets.UTF_8)) {
+ try (BufferedWriter bw = new BufferedWriter(fw)) {
+ bw.write(contentSupplier.get());
+ }
+ }
+ }
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to generate file " + target, e);
+ }
+ return target;
+ }
+ }