build method

  1. @override
FutureOr<void> build(
  1. BuildStep buildStep
)

Writes the merged content to the stand-alone file specified by outputFile.

Implementation

@override
FutureOr<void> build(BuildStep buildStep) async {
  // Validate synthetic input/output.
  SyntheticInput.validatePath<S>(inputFiles);
  SyntheticInput.validatePath<S>(outputFile);

  final libraryAssetIds = (sortAssets)
      ? await orderedLibraryAssetIds(buildStep)
      : await this.libraryAssetIds(buildStep);

  // Check if output overwrites input.
  for (final libraryAssetId in libraryAssetIds) {
    if (path.equals(outputFile, libraryAssetId.path)) {
      throw ErrorOf<MergingBuilder>(
          message: 'Output file clashes with input file!',
          expectedState: 'Output files must not overwrite input files. '
              'Check the [MergingBuilder] constructor argument [outputFile].',
          invalidState: 'Output: $outputFile is also an input file.');
    }
  }

  await buildStep.writeAsString(
    AssetId(
      buildStep.inputId.package,
      outputFile,
    ),
    arrangeContent(
      await generator.generateMergedContent(
        _combineStreams(buildStep, libraryAssetIds),
      ),
      generatedBy: 'Generated by ${generator.runtimeType}.',
    ),
  );
}