blob: a5575aad25a06e206c8d189085970f031665ff1b [file] [log] [blame]
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:build/build.dart';
import 'package:logging/logging.dart';
import '../asset/reader.dart';
import '../asset/writer.dart';
import '../generate/build_directory.dart';
import '../generate/build_result.dart';
import '../generate/finalized_assets_view.dart';
import 'build_environment.dart';
/// A [BuildEnvironment] which can have individual features overridden.
class OverrideableEnvironment implements BuildEnvironment {
final BuildEnvironment _default;
final RunnerAssetReader _reader;
final RunnerAssetWriter _writer;
final void Function(LogRecord) _onLog;
final Future<BuildResult> Function(
BuildResult, FinalizedAssetsView, AssetReader, Set<BuildDirectory>)
_finalizeBuild;
OverrideableEnvironment(
this._default, {
RunnerAssetReader reader,
RunnerAssetWriter writer,
void Function(LogRecord) onLog,
Future<BuildResult> Function(
BuildResult, FinalizedAssetsView, AssetReader, Set<BuildDirectory>)
finalizeBuild,
}) : _reader = reader,
_writer = writer,
_onLog = onLog,
_finalizeBuild = finalizeBuild;
@override
RunnerAssetReader get reader => _reader ?? _default.reader;
@override
RunnerAssetWriter get writer => _writer ?? _default.writer;
@override
Future<BuildResult> finalizeBuild(
BuildResult buildResult,
FinalizedAssetsView finalizedAssetsView,
AssetReader reader,
Set<BuildDirectory> buildDirs) =>
(_finalizeBuild ?? _default.finalizeBuild)(
buildResult, finalizedAssetsView, reader, buildDirs);
@override
void onLog(LogRecord record) {
if (_onLog != null) {
_onLog(record);
} else {
_default.onLog(record);
}
}
@override
Future<int> prompt(String message, List<String> choices) =>
_default.prompt(message, choices);
}