blob: b7ae0ef9f6c2bd022108464eb20d1e278739beee [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../base/file_system.dart';
import 'build_system.dart';
/// An exception thrown when a rule declares an input that does not exist on
/// disk.
class MissingInputException implements Exception {
const MissingInputException(this.missing, this.target);
/// The file or directory we expected to find.
final List<File> missing;
/// The name of the target this file should have been output from.
final String target;
@override
String toString() {
final String files = missing.map((File file) => file.path).join(', ');
return '$files were declared as an inputs, but did not exist. '
'Check the definition of target:$target for errors';
}
}
/// An exception thrown if we detect a cycle in the dependencies of a target.
class CycleException implements Exception {
CycleException(this.targets);
final Set<Target> targets;
@override
String toString() => 'Dependency cycle detected in build: '
'${targets.map((Target target) => target.name).join(' -> ')}';
}
/// An exception thrown when a pattern is invalid.
class InvalidPatternException implements Exception {
InvalidPatternException(this.pattern);
final String pattern;
@override
String toString() => 'The pattern "$pattern" is not valid';
}
/// An exception thrown when a rule declares an output that was not produced
/// by the invocation.
class MissingOutputException implements Exception {
const MissingOutputException(this.missing, this.target);
/// The files we expected to find.
final List<File> missing;
/// The name of the target this file should have been output from.
final String target;
@override
String toString() {
final String files = missing.map((File file) => file.path).join(', ');
return '$files were declared as outputs, but were not generated by '
'the action. Check the definition of target:$target for errors';
}
}
/// An exception thrown when in output is placed outside of
/// [Environment.buildDir].
class MisplacedOutputException implements Exception {
MisplacedOutputException(this.path, this.target);
final String path;
final String target;
@override
String toString() {
return 'Target $target produced an output at $path'
' which is outside of the current build or project directory';
}
}
/// An exception thrown if a build action is missing a required define.
class MissingDefineException implements Exception {
MissingDefineException(this.define, this.target);
final String define;
final String target;
@override
String toString() {
return 'Target $target required define $define '
'but it was not provided';
}
}