c90ca298ed
R=brianwilkerson@google.com Change-Id: I1498c70c1c9d7cd43760ca2c620a3fb819a0c823 Reviewed-on: https://dart-review.googlesource.com/47903 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
100 lines
2.5 KiB
Dart
100 lines
2.5 KiB
Dart
// Copyright (c) 2014, 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 analyzer.exception.exception;
|
|
|
|
/**
|
|
* An exception that occurred during the analysis of one or more sources.
|
|
*/
|
|
class AnalysisException implements Exception {
|
|
/**
|
|
* The message that explains why the exception occurred.
|
|
*/
|
|
final String message;
|
|
|
|
/**
|
|
* The exception that caused this exception, or `null` if this exception was
|
|
* not caused by another exception.
|
|
*/
|
|
final CaughtException cause;
|
|
|
|
/**
|
|
* Initialize a newly created exception to have the given [message] and
|
|
* [cause].
|
|
*/
|
|
AnalysisException([this.message = 'Exception', this.cause = null]);
|
|
|
|
String toString() {
|
|
StringBuffer buffer = new StringBuffer();
|
|
buffer.write('$runtimeType: ');
|
|
buffer.writeln(message);
|
|
if (cause != null) {
|
|
buffer.write('Caused by ');
|
|
cause._writeOn(buffer);
|
|
}
|
|
return buffer.toString();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An exception that was caught and has an associated stack trace.
|
|
*/
|
|
class CaughtException implements Exception {
|
|
/**
|
|
* The exception that was caught.
|
|
*/
|
|
final Object exception;
|
|
|
|
/**
|
|
* The stack trace associated with the exception.
|
|
*/
|
|
StackTrace stackTrace;
|
|
|
|
/**
|
|
* Initialize a newly created caught exception to have the given [exception]
|
|
* and [stackTrace].
|
|
*/
|
|
CaughtException(this.exception, stackTrace) {
|
|
if (stackTrace == null) {
|
|
try {
|
|
throw this;
|
|
} catch (_, st) {
|
|
stackTrace = st;
|
|
}
|
|
}
|
|
this.stackTrace = stackTrace;
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
StringBuffer buffer = new StringBuffer();
|
|
_writeOn(buffer);
|
|
return buffer.toString();
|
|
}
|
|
|
|
/**
|
|
* Write a textual representation of the caught exception and its associated
|
|
* stack trace.
|
|
*/
|
|
void _writeOn(StringBuffer buffer) {
|
|
if (exception is AnalysisException) {
|
|
AnalysisException analysisException = exception;
|
|
buffer.writeln(analysisException.message);
|
|
if (stackTrace != null) {
|
|
buffer.writeln(stackTrace.toString());
|
|
}
|
|
CaughtException cause = analysisException.cause;
|
|
if (cause != null) {
|
|
buffer.write('Caused by ');
|
|
cause._writeOn(buffer);
|
|
}
|
|
} else {
|
|
buffer.writeln(exception.toString());
|
|
if (stackTrace != null) {
|
|
buffer.writeln(stackTrace.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|