library;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue41520.dart:7:11: Error: The method 'notAMethodOnObject' isn't defined for the type 'Object'.
//  - 'Object' is from 'dart:core'.
// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
//     error.notAMethodOnObject();
//           ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/issue41520.dart:12:11: Error: The method 'notAMethodOnObject' isn't defined for the type 'Object'.
//  - 'Object' is from 'dart:core'.
// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
//     error.notAMethodOnObject();
//           ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the type 'StackTrace'.
//  - 'StackTrace' is from 'dart:core'.
// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
//     stackTrace.notAMethodOnStackTrace();
//                ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

static method errors() → void {
  try {
  }
  on core::Object catch(final core::Object error) {
    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:7:11: Error: The method 'notAMethodOnObject' isn't defined for the type 'Object'.
 - 'Object' is from 'dart:core'.
Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
    error.notAMethodOnObject();
          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
    self::_takesObject(error);
  }
  try {
  }
  on core::Object catch(final core::Object error, final core::StackTrace stackTrace) {
    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:12:11: Error: The method 'notAMethodOnObject' isn't defined for the type 'Object'.
 - 'Object' is from 'dart:core'.
Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
    error.notAMethodOnObject();
          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the type 'StackTrace'.
 - 'StackTrace' is from 'dart:core'.
Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
    stackTrace.notAMethodOnStackTrace();
               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
    self::_takesObject(error);
    self::_takesStackTrace(stackTrace);
  }
}
static method _takesObject(core::Object o) → void {}
static method _takesStackTrace(core::StackTrace o) → void {}
static method main() → void {}
