Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: mojo/public/dart/third_party/barback/lib/src/errors.dart

Issue 1346773002: Stop running pub get at gclient sync time and fix build bugs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/dart/third_party/barback/lib/src/errors.dart
diff --git a/mojo/public/dart/third_party/barback/lib/src/errors.dart b/mojo/public/dart/third_party/barback/lib/src/errors.dart
new file mode 100644
index 0000000000000000000000000000000000000000..3488e31459528b3c9ac40c140715eb7b552774a4
--- /dev/null
+++ b/mojo/public/dart/third_party/barback/lib/src/errors.dart
@@ -0,0 +1,192 @@
+// Copyright (c) 2013, 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.
+
+library barback.errors;
+
+import 'package:stack_trace/stack_trace.dart';
+
+import 'asset/asset_id.dart';
+import 'transformer/wrapping_aggregate_transformer.dart';
+import 'utils.dart';
+
+/// Error thrown when an asset with [id] cannot be found.
+class AssetNotFoundException implements Exception {
+ final AssetId id;
+
+ AssetNotFoundException(this.id);
+
+ String toString() => "Could not find asset $id.";
+}
+
+/// Replaces any occurrences of [AggregateException] in [errors] with the list
+/// of errors it contains.
+Iterable<BarbackException> flattenAggregateExceptions(
+ Iterable<BarbackException> errors) {
+ return errors.expand((error) {
+ if (error is! AggregateException) return [error];
+ return error.errors;
+ });
+}
+
+/// The interface for exceptions from the barback graph or its transformers.
+///
+/// These exceptions are never produced by programming errors in barback.
+abstract class BarbackException implements Exception {
+ /// Takes a collection of [BarbackExceptions] and returns a single exception
+ /// that contains them all.
+ ///
+ /// If [errors] is empty, returns `null`. If it only has one error, that
+ /// error is returned. Otherwise, an [AggregateException] is returned.
+ static BarbackException aggregate(Iterable<BarbackException> errors) {
+ if (errors.isEmpty) return null;
+ if (errors.length == 1) return errors.single;
+ return new AggregateException(errors);
+ }
+}
+
+/// An error that wraps a collection of other [BarbackException]s.
+///
+/// It implicitly flattens any [AggregateException]s that occur in the list of
+/// exceptions it wraps.
+class AggregateException implements BarbackException {
+ final Set<BarbackException> errors;
+
+ AggregateException(Iterable<BarbackException> errors)
+ : errors = flattenAggregateExceptions(errors).toSet();
+
+ String toString() {
+ var buffer = new StringBuffer();
+ buffer.writeln("Multiple errors occurred:\n");
+
+ for (var error in errors) {
+ buffer.writeln(prefixLines(error.toString(),
+ prefix: " ", firstPrefix: "- "));
+ }
+
+ return buffer.toString();
+ }
+}
+
+/// Error thrown when two or more transformers both output an asset with [id].
+class AssetCollisionException implements BarbackException {
+ /// All the transforms that output an asset with [id].
+ ///
+ /// If this only contains a single transform, that indicates that a
+ /// transformer produced an output that collides with a source asset or an
+ /// asset from a previous phase.
+ final Set<TransformInfo> transforms;
+ final AssetId id;
+
+ AssetCollisionException(Iterable<TransformInfo> transforms, this.id)
+ : transforms = new Set.from(transforms);
+
+ String toString() => "Transforms $transforms all emitted asset $id.";
+}
+
+/// Error thrown when a transformer requests an input [id] which cannot be
+/// found.
+class MissingInputException implements BarbackException {
+ /// The transform that requested [id].
+ final TransformInfo transform;
+ final AssetId id;
+
+ MissingInputException(this.transform, this.id);
+
+ String toString() => "Transform $transform tried to load missing input $id.";
+}
+
+/// Error thrown when a transformer outputs an asset to a different package than
+/// the primary input's.
+class InvalidOutputException implements BarbackException {
+ /// The transform that output the asset.
+ final TransformInfo transform;
+ final AssetId id;
+
+ InvalidOutputException(this.transform, this.id);
+
+ String toString() => "Transform $transform emitted $id, which wasn't in the "
+ "same package (${transform.primaryId.package}).";
+}
+
+/// Base class for an error that wraps another.
+abstract class _WrappedException implements BarbackException {
+ /// The wrapped exception.
+ final error;
+ final Chain stackTrace;
+
+ String get message => "$_message: ${getErrorMessage(error)}";
+
+ String get _message;
+
+ _WrappedException(error, StackTrace stackTrace)
+ : this.error = error,
+ this.stackTrace = _getChain(error, stackTrace);
+
+ String toString() {
+ var result = message;
+ if (stackTrace != null) result = "$result\n${stackTrace.terse}";
+ return result;
+ }
+}
+
+/// Returns the stack chain for [error] and [stackTrace].
+Chain _getChain(error, StackTrace stackTrace) {
+ if (error is Error && stackTrace == null) stackTrace = error.stackTrace;
+ if (stackTrace != null) return new Chain.forTrace(stackTrace);
+ return null;
+}
+
+/// Error wrapping an exception thrown by a transform.
+class TransformerException extends _WrappedException {
+ /// The transform that threw the exception.
+ final TransformInfo transform;
+
+ TransformerException(this.transform, error, StackTrace stackTrace)
+ : super(error, stackTrace);
+
+ String get _message => "Transform $transform threw error";
+}
+
+/// Error thrown when a source asset [id] fails to load.
+///
+/// This can be thrown either because the source asset was expected to exist and
+/// did not or because reading it failed somehow.
+class AssetLoadException extends _WrappedException {
+ final AssetId id;
+
+ AssetLoadException(this.id, error, [StackTrace stackTrace])
+ : super(error, stackTrace);
+
+ String get _message => "Failed to load source asset $id";
+}
+
+/// Information about a single transform in the barback graph.
+///
+/// Identifies a single transformation in the barback graph.
+///
+/// A transformation is uniquely identified by the ID of its primary input, and
+/// the transformer that is applied to it.
+class TransformInfo {
+ /// The transformer that's run for this transform.
+ ///
+ /// This may be a [Transformer] or a [WrappingAggregateTransformer]. It may
+ /// also return additional types in the future.
+ final transformer;
+
+ /// The id of this transform's primary asset.
+ final AssetId primaryId;
+
+ TransformInfo(transformer, this.primaryId)
+ : transformer = transformer is WrappingAggregateTransformer ?
+ transformer.transformer : transformer;
+
+ bool operator==(other) =>
+ other is TransformInfo &&
+ other.transformer == transformer &&
+ other.primaryId == primaryId;
+
+ int get hashCode => transformer.hashCode ^ primaryId.hashCode;
+
+ String toString() => "$transformer on $primaryId";
+}

Powered by Google App Engine
This is Rietveld 408576698