| // 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()); |
| } |
| } |
| } |
| } |