>>>
void main() {
  try {
    doSomething();
  } on Exception catch (e) {} finally {
    cleanupSomething();
  }
}
<<<
void main() {
  try {
    doSomething();
  } on Exception catch (e) {
  } finally {
    cleanupSomething();
  }
}
>>>
void main() {
  try {
    doSomething();
  } on FooException {} on BarException {
    doSomething();
  }
}
<<<
void main() {
  try {
    doSomething();
  } on FooException {
  } on BarException {
    doSomething();
  }
}