bool enableRead = true;

int read(int value) => enableRead ? value : -1;

int method1() => 0;

int method2(int a) => -a;

int method3(int a, int b) => a - b;

int method4(int a, [int b = 0]) => a - b;

int method5([int a = 0, int b = 0]) => a - b;

int method6(int a, {int b = 0}) => a - b;

int method7({int a = 0, int b = 0}) => a - b;

class Class {
  Function field1a = method1;
  int Function() field1b = method1;
  int Function(int a) field2 = method2;
  int Function(int a, int b) field3 = method3;
  int Function(int a, [int b]) field4 = method4;
  int Function([int a, int b]) field5 = method5;
  int Function(int a, {int b}) field6 = method6;
  int Function({int a, int b}) field7 = method7;
  Function get getter1a => method1;
  int Function() get getter1b => method1;
  int Function(int a) get getter2 => method2;
  int Function(int a, int b) get getter3 => method3;
  int Function(int a, [int b]) get getter4 => method4;
  int Function([int a, int b]) get getter5 => method5;
  int Function(int a, {int b}) get getter6 => method6;
  int Function({int a, int b}) get getter7 => method7;
}

class Subclass extends Class {
  Function get field1a {}
  int Function() get field1b {}
  int Function(int a) get field2 {}
  int Function(int a, int b) get field3 {}
  int Function(int a, [int b]) get field4 {}
  int Function([int a, int b]) get field5 {}
  int Function(int a, {int b}) get field6 {}
  int Function({int a, int b}) get field7 {}
  Function get getter1a {}
  int Function() get getter1b {}
  int Function(int a) get getter2 {}
  int Function(int a, int b) get getter3 {}
  int Function(int a, [int b]) get getter4 {}
  int Function([int a, int b]) get getter5 {}
  int Function(int a, {int b}) get getter6 {}
  int Function({int a, int b}) get getter7 {}
}

main() {}

callField(Class c) {}

callGetter(Class c) {}

expect(expected, actual) {}
