library;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
  set a(dynamic #synthetic) → void
    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
  set d(dynamic #synthetic) → void
    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
}
abstract class B extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
  set a(dynamic #synthetic) → void
    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^"));
  set d(dynamic #synthetic) → void
    let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^"));
}
static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^"]/* from null */;
static set b(dynamic #synthetic) → void
  let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^"));
static set c(dynamic #synthetic) → void
  let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n     ^"));
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.";
  }
}
