library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:7:8: Error: Expected a function body or '=>'.
// Try adding {}.
// set b();
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:9:12: Error: Expected a function body or '=>'.
// Try adding {}.
// set c(x, y);
//            ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
// set b();
//      ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:9:6: Error: A setter should have exactly one formal parameter.
// set c(x, y);
//      ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:12:8: Error: A setter should have exactly one formal parameter.
//   set a();
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:13:8: Error: A setter should have exactly one formal parameter.
//   set d(x, y);
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:17:8: Error: A setter should have exactly one formal parameter.
//   set a();
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:18:8: Error: A setter should have exactly one formal parameter.
//   set d(x, y);
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:68:9: Error: The class 'B' is abstract and can't be instantiated.
//     new B();
//         ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
  set a(dynamic #synthetic) → void {
    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:12:8: Error: A setter should have exactly one formal parameter.
  set a();
       ^";
    ;
  }
  set d(dynamic #synthetic) → void {
    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:13:8: Error: A setter should have exactly one formal parameter.
  set d(x, y);
       ^";
    {
      dynamic x;
      dynamic y;
      ;
    }
  }
}
abstract class B extends core::Object {
  synthetic constructor •() → self::B*
    : super core::Object::•()
    ;
  set a(dynamic #synthetic) → void {
    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:17:8: Error: A setter should have exactly one formal parameter.
  set a();
       ^";
    ;
  }
  set d(dynamic #synthetic) → void {
    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:18:8: Error: A setter should have exactly one formal parameter.
  set d(x, y);
       ^";
    {
      dynamic x;
      dynamic y;
      ;
    }
  }
}
static set b(dynamic #synthetic) → void {
  invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
set b();
     ^";
  ;
}
static set c(dynamic #synthetic) → void {
  invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/bad_setter_abstract.dart:9:6: Error: A setter should have exactly one formal parameter.
set c(x, y);
     ^";
  {
    dynamic x;
    dynamic y;
    ;
  }
}
static method main() → dynamic {
  core::bool* threw;
  try {
    threw = true;
    new self::A::•().{self::A::a} = null;
    threw = false;
  }
  on dynamic catch(final dynamic e) {
  }
  if(!threw) {
    throw "Expected an error above.";
  }
  try {
    threw = true;
    new self::A::•().{self::A::d} = null;
    threw = false;
  }
  on dynamic catch(final dynamic e) {
  }
  if(!threw) {
    throw "Expected an error above.";
  }
  try {
    threw = true;
    self::b = null;
    threw = false;
  }
  on dynamic catch(final dynamic e) {
  }
  if(!threw) {
    throw "Expected an error above.";
  }
  if(!threw) {
    throw "Expected an error above.";
  }
  try {
    threw = true;
    self::c = null;
    threw = false;
  }
  on dynamic catch(final dynamic e) {
  }
  if(!threw) {
    throw "Expected an error above.";
  }
  try {
    threw = true;
    throw new core::AbstractClassInstantiationError::•("B");
    threw = false;
  }
  on core::AbstractClassInstantiationError* catch(final core::AbstractClassInstantiationError* _) {
  }
  if(!threw) {
    throw "Expected an error above.";
  }
}
