library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/call_collision.dart:19:6: Error: The setter 'call' isn't defined for the class 'Function'.
//  - 'Function' is from 'dart:core'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
//   f1.call = 0; // Error.
//      ^^^^
//
// pkg/front_end/testcases/extensions/call_collision.dart:21:6: Error: The setter 'call' isn't defined for the class 'void Function()'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
//   f2.call = 0; // Error.
//      ^^^^
//
// pkg/front_end/testcases/extensions/call_collision.dart:23:6: Error: The method 'call' isn't defined for the class 'Class'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/call_collision.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'call'.
//   c1.call(); // Error.
//      ^^^^
//
// pkg/front_end/testcases/extensions/call_collision.dart:24:6: Error: The setter 'call' isn't defined for the class 'Class?'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/call_collision.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
//   c2.call = 0; // Error.
//      ^^^^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  set call(dynamic _) → void {}
}
extension /* unnamed */ _extension#0 on dynamic {
  set call = self::_extension#0|set#call;
}
extension /* unnamed */ _extension#1 on self::Class? {
  method call = self::_extension#1|call;
  tearoff call = self::_extension#1|get#call;
}
static method _extension#0|set#call(lowered final dynamic #this, dynamic _) → void {}
static method _extension#1|call(lowered final self::Class? #this) → void {}
static method _extension#1|get#call(lowered final self::Class? #this) → () → void
  return () → void => self::_extension#1|call(#this);
static method method(core::Function f1, () → void f2, self::Class c1, self::Class? c2) → dynamic {
  f1();
  invalid-expression "pkg/front_end/testcases/extensions/call_collision.dart:19:6: Error: The setter 'call' isn't defined for the class 'Function'.
 - 'Function' is from 'dart:core'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
  f1.call = 0; // Error.
     ^^^^" in f1{<unresolved>}.call = 0;
  f2(){() → void};
  invalid-expression "pkg/front_end/testcases/extensions/call_collision.dart:21:6: Error: The setter 'call' isn't defined for the class 'void Function()'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
  f2.call = 0; // Error.
     ^^^^" in f2{<unresolved>}.call = 0;
  c1.{self::Class::call} = 0;
  invalid-expression "pkg/front_end/testcases/extensions/call_collision.dart:23:6: Error: The method 'call' isn't defined for the class 'Class'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/call_collision.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'call'.
  c1.call(); // Error.
     ^^^^" in c1{<unresolved>}.call();
  invalid-expression "pkg/front_end/testcases/extensions/call_collision.dart:24:6: Error: The setter 'call' isn't defined for the class 'Class?'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/call_collision.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'call'.
  c2.call = 0; // Error.
     ^^^^" in c2{<unresolved>}.call = 0;
  self::_extension#1|call(c2);
}
