// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*library: nnbd=true*/
library main;

import 'opt_out.dart';

/*class: Interface:Interface,Object*/
abstract class Interface {
  /*member: Interface.method1:int Function()*/
  int method1();

  /*member: Interface.method2:int? Function()*/
  int? method2();

  /*member: Interface.method3a:int Function(int, int)*/
  int method3a(int a, int b);

  /*member: Interface.method3b:int Function(int, [int])*/
  int method3b(int a, [int b]);

  /*member: Interface.method3c:int Function([int, int])*/
  int method3c([int a, int b]);

  /*member: Interface.method4a:int? Function(int?, int?)*/
  int? method4a(int? a, int? b);

  /*member: Interface.method4b:int? Function(int?, [int?])*/
  int? method4b(int? a, [int? b]);

  /*member: Interface.method4c:int? Function([int?, int?])*/
  int? method4c([int? a, int? b]);

  /*member: Interface.method5a:int Function(int, {int b})*/
  int method5a(int a, {int b: 0});

  /*member: Interface.method5b:int Function({int a, int b})*/
  int method5b({int a: 0, int b: 0});

  /*member: Interface.method6a:int? Function(int?, {int? b})*/
  int? method6a(int? a, {int? b});

  /*member: Interface.method6b:int? Function({int? a, int? b})*/
  int? method6b({int? a, int? b});

  /*member: Interface.getter1:int*/
  int get getter1;

  /*member: Interface.getter2:int?*/
  int? get getter2;

  /*member: Interface.setter1=:int*/
  void set setter1(int value);

  /*member: Interface.setter2=:int?*/
  void set setter2(int? value);

  /*member: Interface.field1:int*/
  /*member: Interface.field1=:int*/
  int field1 = 0;

  /*member: Interface.field2:int?*/
  /*member: Interface.field2=:int?*/
  int? field2;

  /*member: Interface.field3:int*/
  int get field3;

  /*member: Interface.field3=:int*/
  void set field3(int value);

  /*member: Interface.field4:int?*/
  int? get field4;

  /*member: Interface.field4=:int?*/
  void set field4(int? value);

  /*member: Interface.field5:int*/
  /*member: Interface.field5=:int*/
  var field5 = 0;

  /*member: Interface.field6:int?*/
  /*member: Interface.field6=:int?*/
  var field6 = constant;

  /*member: Interface.property1:int*/
  int get property1;

  /*member: Interface.property1=:int*/
  void set property1(int value);

  /*member: Interface.property2:int?*/
  int? get property2;

  /*member: Interface.property2=:int?*/
  void set property2(int? value);

  /*member: Interface.property3:int*/
  /*member: Interface.property3=:int*/
  int property3 = 0;

  /*member: Interface.property4:int?*/
  /*member: Interface.property4=:int?*/
  int? property4;
}

/*class: Class1:Class1,LegacyClass,Object*/
/*member: Class1.field1=:int**/
/*member: Class1.field2=:int**/
/*member: Class1.field3=:int**/
/*member: Class1.field4=:int**/
/*member: Class1.field5=:int**/
/*member: Class1.field6=:int**/
class Class1 extends LegacyClass {
  /*member: Class1.method1:int* Function()**/
  /*member: Class1.method2:int* Function()**/
  /*member: Class1.method3a:int* Function(int*, int*)**/
  /*member: Class1.method3b:int* Function(int*, [int*])**/
  /*member: Class1.method3c:int* Function([int*, int*])**/
  /*member: Class1.method4a:int* Function(int*, int*)**/
  /*member: Class1.method4b:int* Function(int*, [int*])**/
  /*member: Class1.method4c:int* Function([int*, int*])**/
  /*member: Class1.method5a:int* Function(int*, {int* b})**/
  /*member: Class1.method5b:int* Function({int* a, int* b})**/
  /*member: Class1.method6a:int* Function(int*, {int* b})**/
  /*member: Class1.method6b:int* Function({int* a, int* b})**/
  /*member: Class1.getter1:int**/
  /*member: Class1.getter2:int**/
  /*member: Class1.setter1=:int**/
  /*member: Class1.setter2=:int**/
  /*member: Class1.field1:int**/
  /*member: Class1.field2:int**/
  /*member: Class1.field3:int**/
  /*member: Class1.field4:int**/
  /*member: Class1.field5:int**/
  /*member: Class1.field6:int**/
  /*member: Class1.property1:int**/
  /*member: Class1.property1=:int**/
  /*member: Class1.property2:int**/
  /*member: Class1.property2=:int**/
  /*member: Class1.property3:int**/
  /*member: Class1.property3=:int**/
  /*member: Class1.property4:int**/
  /*member: Class1.property4=:int**/
}

/*class: Class2a:Class2a,Interface,LegacyClass,Object*/
class Class2a extends LegacyClass implements Interface {
  /*member: Class2a.method1:int Function()*/

  /*member: Class2a.method2:int? Function()*/

  /*member: Class2a.method3a:int Function(int, int)*/

  /*member: Class2a.method3b:int Function(int, [int])*/

  /*member: Class2a.method3c:int Function([int, int])*/

  /*member: Class2a.method4a:int? Function(int?, int?)*/

  /*member: Class2a.method4b:int? Function(int?, [int?])*/

  /*member: Class2a.method4c:int? Function([int?, int?])*/

  /*member: Class2a.method5a:int Function(int, {int b})*/

  /*member: Class2a.method5b:int Function({int a, int b})*/

  /*member: Class2a.method6a:int? Function(int?, {int? b})*/

  /*member: Class2a.method6b:int? Function({int? a, int? b})*/

  /*member: Class2a.getter1:int*/
  /*member: Class2a.getter2:int?*/

  /*member: Class2a.setter1=:int*/
  /*member: Class2a.setter2=:int?*/

  /*member: Class2a.field1:int*/
  /*member: Class2a.field1=:int*/

  /*member: Class2a.field2:int?*/
  /*member: Class2a.field2=:int?*/

  /*member: Class2a.field3:int*/
  /*member: Class2a.field3=:int*/

  /*member: Class2a.field4:int?*/
  /*member: Class2a.field4=:int?*/

  /*member: Class2a.field5:int*/
  /*member: Class2a.field5=:int*/

  /*member: Class2a.field6:int?*/
  /*member: Class2a.field6=:int?*/

  /*member: Class2a.property1:int*/
  /*member: Class2a.property1=:int*/

  /*member: Class2a.property2:int?*/
  /*member: Class2a.property2=:int?*/

  /*member: Class2a.property3:int*/
  /*member: Class2a.property3=:int*/

  /*member: Class2a.property4:int?*/
  /*member: Class2a.property4=:int?*/
}

/*class: Class2b:Class2b,Interface,LegacyClass,Object*/
class Class2b extends LegacyClass implements Interface {
  /*member: Class2b.method1:int Function()*/
  int method1() => 0;

  /*member: Class2b.method2:int? Function()*/
  int? method2() => 0;

  /*member: Class2b.method3a:int Function(int, int)*/
  int method3a(int a, int b) => 0;

  /*member: Class2b.method3b:int Function(int, [int])*/
  int method3b(int a, [int b = 0]) => 0;

  /*member: Class2b.method3c:int Function([int, int])*/
  int method3c([int a = 0, int b = 0]) => 0;

  /*member: Class2b.method4a:int? Function(int?, int?)*/
  int? method4a(int? a, int? b) => 0;

  /*member: Class2b.method4b:int? Function(int?, [int?])*/
  int? method4b(int? a, [int? b]) => 0;

  /*member: Class2b.method4c:int? Function([int?, int?])*/
  int? method4c([int? a, int? b]) => 0;

  /*member: Class2b.method5a:int Function(int, {int b})*/
  int method5a(int a, {int b: 0}) => 0;

  /*member: Class2b.method5b:int Function({int a, int b})*/
  int method5b({int a: 0, int b: 0}) => 0;

  /*member: Class2b.method6a:int? Function(int?, {int? b})*/
  int? method6a(int? a, {int? b}) => 0;

  /*member: Class2b.method6b:int? Function({int? a, int? b})*/
  int? method6b({int? a, int? b}) => 0;

  /*member: Class2b.getter1:int*/
  int get getter1 => 0;

  /*member: Class2b.getter2:int?*/
  int? get getter2 => 0;

  /*member: Class2b.setter1=:int*/
  void set setter1(int value) {}

  /*member: Class2b.setter2=:int?*/
  void set setter2(int? value) {}

  /*member: Class2b.field1:int*/
  /*member: Class2b.field1=:int*/
  int field1 = 0;

  /*member: Class2b.field2:int?*/
  /*member: Class2b.field2=:int?*/
  int? field2;

  /*member: Class2b.field3:int*/
  int get field3 => 0;

  /*member: Class2b.field3=:int*/
  void set field3(int value) {}

  /*member: Class2b.field4:int?*/
  int? get field4 => 0;

  /*member: Class2b.field5:int*/
  /*member: Class2b.field5=:int*/
  int field5 = 0;

  /*member: Class2b.field6=:int?*/
  /*member: Class2b.field6:int?*/
  int? field6;

  /*member: Class2b.field4=:int?*/
  void set field4(int? value) {}

  /*member: Class2b.property1:int*/
  int get property1 => 0;

  /*member: Class2b.property1=:int*/
  void set property1(int value) {}

  /*member: Class2b.property2:int?*/
  int? get property2 => 0;

  /*member: Class2b.property2=:int?*/
  void set property2(int? value) {}

  /*member: Class2b.property3:int*/
  /*member: Class2b.property3=:int*/
  int property3 = 0;

  /*member: Class2b.property4=:int?*/
  /*member: Class2b.property4:int?*/
  int? property4;
}

/*class: Class3a:Class3a,GenericLegacyClass<int>,Object*/
class Class3a extends GenericLegacyClass<int> {
  /*member: Class3a.method1:int* Function()**/
}

/*class: Class3b:Class3b,GenericLegacyClass<int?>,Object*/
class Class3b extends GenericLegacyClass<int?> {
  /*member: Class3b.method1:int? Function()**/
}

/*class: Class3c:Class3c<S>,GenericLegacyClass<S>,Object*/
class Class3c<S> extends GenericLegacyClass<S> {
  /*member: Class3c.method1:S* Function()**/
}

const int? constant = 0;
