library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:7:8: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
//   int? getter => null;
//        ^^^^^^
//
// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
//  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
//   c.setter = c.getter;
//     ^^^^^^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  field core::int? field = null;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method getter() → core::int?
    return null;
  method setter(core::int? value) → void {}
  method method() → void {}
}
static method test(self::Class c, dynamic d, core::Function f1, () → void f2) → dynamic {
  c.{self::Class::field} = c.{self::Class::field}{core::int?};
  invalid-expression "pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
 - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
  c.setter = c.getter;
    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
  c.{self::Class::method}{() → void};
  c.{self::Class::method}(){() → void};
  d{dynamic}.field = d{dynamic}.field;
  d{dynamic}.setter = d{dynamic}.getter;
  d{dynamic}.method;
  d{dynamic}.method();
  f1();
  f1.call;
  f2(){() → void};
  f2.call;
  function local() → Null {}
  local(){() → Null};
  c =={core::Object::==}{(core::Object) → core::bool} d;
  !(c =={core::Object::==}{(core::Object) → core::bool} d);
  c == null;
  !(c == null);
  d == null;
  !(d == null);
}
static method main() → dynamic {}
