BuilderApplication.forPostProcessBuilder constructor

BuilderApplication.forPostProcessBuilder(
  1. String builderKey,
  2. PostProcessBuilderFactory builderFactory, {
  3. InputSet defaultGenerateFor = const InputSet(),
  4. BuilderOptions defaultOptions = BuilderOptions.empty,
  5. BuilderOptions? defaultDevOptions,
  6. BuilderOptions? defaultReleaseOptions,
})

Note that these builder applications each create their own phase, but they will all eventually be merged into a single phase.

Implementation

factory BuilderApplication.forPostProcessBuilder(
  String builderKey,
  PostProcessBuilderFactory builderFactory, {
  InputSet defaultGenerateFor = const InputSet(),
  BuilderOptions defaultOptions = BuilderOptions.empty,
  BuilderOptions? defaultDevOptions,
  BuilderOptions? defaultReleaseOptions,
}) {
  PostBuildPhase phaseFactory(PackageNode package, BuilderOptions options,
      InputSet targetSources, InputSet? generateFor, bool isReleaseBuild) {
    generateFor ??= defaultGenerateFor;

    var optionsWithDefaults = defaultOptions
        .overrideWith(
            isReleaseBuild ? defaultReleaseOptions : defaultDevOptions)
        .overrideWith(options);
    if (package.isRoot) {
      optionsWithDefaults =
          optionsWithDefaults.overrideWith(BuilderOptions.forRoot);
    }

    final logger = Logger(builderKey);
    final builder =
        _scopeLogSync(() => builderFactory(optionsWithDefaults), logger);
    if (builder == null) throw CannotBuildException();
    _validatePostProcessBuilder(builder);
    var builderAction = PostBuildAction(builder, package.name,
        builderOptions: optionsWithDefaults,
        generateFor: generateFor,
        targetSources: targetSources);
    return PostBuildPhase([builderAction]);
  }

  return BuilderApplication._(
      builderKey, [phaseFactory], toNoneByDefault(), true, []);
}