alwaysThrows top-level constant Null safety

_AlwaysThrows const alwaysThrows

Used to annotate a function f. Indicates that f always throws an exception. Any functions that override f, in class inheritance, are also expected to conform to this contract.

Tools, such as the analyzer, can use this to understand whether a block of code "exits". For example:

@alwaysThrows toss() { throw 'Thrown'; }

int fn(bool b) {
  if (b) {
    return 0;
  } else {
    toss();
    print("Hello.");
  }
}

Without the annotation on toss, it would look as though fn doesn't always return a value. The annotation shows that fn does always exit. In addition, the annotation reveals that any statements following a call to toss (like the print call) are dead code.

Tools, such as the analyzer, can also expect this contract to be enforced; that is, tools may emit warnings if a function with this annotation doesn't always throw.

Implementation

const _AlwaysThrows alwaysThrows = _AlwaysThrows();