library main;
import self as self;
import "dart:core" as core;
import "member_inheritance_from_opt_out_lib.dart" as opt;

import "org-dartlang-testcase:///member_inheritance_from_opt_out_lib.dart";

abstract class Interface extends core::Object {
  field core::int field1;
  field core::int? field2;
  field core::int property3;
  field core::int? property4;
  synthetic constructor •() → self::Interface
    ;
  abstract method method1() → core::int;
  abstract method method2() → core::int?;
  abstract method method3a(core::int a, core::int b) → core::int;
  abstract method method3b(core::int a, [core::int b]) → core::int;
  abstract method method3c([core::int a, core::int b]) → core::int;
  abstract method method4a(core::int? a, core::int? b) → core::int?;
  abstract method method4b(core::int? a, [core::int? b]) → core::int?;
  abstract method method4c([core::int? a, core::int? b]) → core::int?;
  abstract method method5a(core::int a, {core::int b = 0}) → core::int;
  abstract method method5b({core::int a = 0, core::int b = 0}) → core::int;
  abstract method method5c({required core::int a, required core::int b}) → core::int;
  abstract method method6a(core::int? a, {core::int? b}) → core::int?;
  abstract method method6b({core::int? a, core::int? b}) → core::int?;
  abstract method method6c({required core::int? a, required core::int? b}) → core::int?;
  abstract get getter1() → core::int;
  abstract get getter2() → core::int?;
  abstract set setter1(core::int value) → void;
  abstract set setter2(core::int? value) → void;
  abstract get field3() → core::int;
  abstract set field3(core::int value) → void;
  abstract get field4() → core::int?;
  abstract set field4(core::int? value) → void;
  abstract get property1() → core::int;
  abstract set property1(core::int value) → void;
  abstract get property2() → core::int?;
  abstract set property2(core::int? value) → void;
}
class Class1 extends opt::LegacyClass {
  synthetic constructor •() → self::Class1
    ;
}
class Class2a extends opt::LegacyClass implements self::Interface {
  synthetic constructor •() → self::Class2a
    ;
  abstract member-signature method method4a(core::int? a, core::int? b) → core::int?;
  abstract member-signature method method4c([core::int? a, core::int? b]) → core::int?;
  abstract member-signature get getter1() → core::int;
  abstract member-signature get field1() → core::int;
  abstract member-signature method method3a(core::int a, core::int b) → core::int;
  abstract member-signature get field4() → core::int?;
  abstract member-signature get property3() → core::int;
  abstract member-signature get field2() → core::int?;
  abstract member-signature method method6a(core::int? a, {core::int? b}) → core::int?;
  abstract member-signature get getter2() → core::int?;
  abstract member-signature method method5a(core::int a, {core::int b}) → core::int;
  abstract member-signature method method5c({core::int a, core::int b}) → core::int;
  abstract member-signature get property4() → core::int?;
  abstract member-signature method method6b({core::int? a, core::int? b}) → core::int?;
  abstract member-signature method method6c({core::int? a, core::int? b}) → core::int?;
  abstract member-signature method method2() → core::int?;
  abstract member-signature method method5b({core::int a, core::int b}) → core::int;
  abstract member-signature method method4b(core::int? a, [core::int? b]) → core::int?;
  abstract member-signature get field3() → core::int;
  abstract member-signature method method3c([core::int a, core::int b]) → core::int;
  abstract member-signature method method1() → core::int;
  abstract member-signature get property1() → core::int;
  abstract member-signature get property2() → core::int?;
  abstract member-signature method method3b(core::int a, [core::int b]) → core::int;
  abstract member-signature set setter1(core::int value) → void;
  abstract member-signature set field1(core::int _) → void;
  abstract member-signature set field4(core::int? _) → void;
  abstract member-signature set property3(core::int value) → void;
  abstract member-signature set field2(core::int? _) → void;
  abstract member-signature set property4(core::int? value) → void;
  abstract member-signature set setter2(core::int? value) → void;
  abstract member-signature set field3(core::int _) → void;
  abstract member-signature set property1(core::int value) → void;
  abstract member-signature set property2(core::int? value) → void;
}
class Class2b extends opt::LegacyClass implements self::Interface {
  field core::int field1;
  field core::int? field2;
  field core::int property3;
  field core::int? property4;
  synthetic constructor •() → self::Class2b
    ;
  method method1() → core::int
    ;
  method method2() → core::int?
    ;
  method method3a(core::int a, core::int b) → core::int
    ;
  method method3b(core::int a, [core::int b]) → core::int
    ;
  method method3c([core::int a, core::int b]) → core::int
    ;
  method method4a(core::int? a, core::int? b) → core::int?
    ;
  method method4b(core::int? a, [core::int? b]) → core::int?
    ;
  method method4c([core::int? a, core::int? b]) → core::int?
    ;
  method method5a(core::int a, {core::int b = 0}) → core::int
    ;
  method method5b({core::int a = 0, core::int b = 0}) → core::int
    ;
  method method5c({required core::int a, required core::int b}) → core::int
    ;
  method method6a(core::int? a, {core::int? b}) → core::int?
    ;
  method method6b({core::int? a, core::int? b}) → core::int?
    ;
  method method6c({required core::int? a, required core::int? b}) → core::int?
    ;
  get getter1() → core::int
    ;
  get getter2() → core::int?
    ;
  set setter1(core::int value) → void
    ;
  set setter2(core::int? value) → void
    ;
  get field3() → core::int
    ;
  set field3(core::int value) → void
    ;
  get field4() → core::int?
    ;
  set field4(core::int? value) → void
    ;
  get property1() → core::int
    ;
  set property1(core::int value) → void
    ;
  get property2() → core::int?
    ;
  set property2(core::int? value) → void
    ;
}
class Class3a extends opt::GenericLegacyClass<core::int> {
  synthetic constructor •() → self::Class3a
    ;
}
class Class3b extends opt::GenericLegacyClass<core::int?> {
  synthetic constructor •() → self::Class3b
    ;
}
class Class3c<S extends core::Object? = dynamic> extends opt::GenericLegacyClass<self::Class3c::S%> {
  synthetic constructor •() → self::Class3c<self::Class3c::S%>
    ;
}
static method main() → dynamic
  ;

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

class LegacyClass extends core::Object {
  field core::int* field1;
  field core::int* field2;
  field core::int* field3;
  field core::int* field4;
  synthetic constructor •() → opt::LegacyClass*
    ;
  method method1() → core::int*
    ;
  method method2() → core::int*
    ;
  method method3a(core::int* a, core::int* b) → core::int*
    ;
  method method3b(core::int* a, [core::int* b]) → core::int*
    ;
  method method3c([core::int* a, core::int* b]) → core::int*
    ;
  method method4a(core::int* a, core::int* b) → core::int*
    ;
  method method4b(core::int* a, [core::int* b]) → core::int*
    ;
  method method4c([core::int* a, core::int* b]) → core::int*
    ;
  method method5a(core::int* a, {core::int* b}) → core::int*
    ;
  method method5b({core::int* a, core::int* b}) → core::int*
    ;
  method method5c({core::int* a, core::int* b}) → core::int*
    ;
  method method6a(core::int* a, {core::int* b}) → core::int*
    ;
  method method6b({core::int* a, core::int* b}) → core::int*
    ;
  method method6c({core::int* a, core::int* b}) → core::int*
    ;
  get getter1() → core::int*
    ;
  get getter2() → core::int*
    ;
  set setter1(core::int* value) → void
    ;
  set setter2(core::int* value) → void
    ;
  get property1() → core::int*
    ;
  set property1(core::int* value) → void
    ;
  get property2() → core::int*
    ;
  set property2(core::int* value) → void
    ;
  get property3() → core::int*
    ;
  set property3(core::int* value) → void
    ;
  get property4() → core::int*
    ;
  set property4(core::int* value) → void
    ;
}
class GenericLegacyClass<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → opt::GenericLegacyClass<opt::GenericLegacyClass::T*>*
    ;
  method method1() → opt::GenericLegacyClass::T*
    ;
}
