// Copyright (c) 2021, 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.

/*class: Super:
 maxInheritancePath=1,
 superclasses=[Object]
*/
abstract class Super {
  /*member: Super.extendedGetterDeclaredField#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterDeclaredField => '';

  /*member: Super.extendedGetterMixedInField#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterMixedInField => '';

  /*member: Super.extendedGetterImplementedField#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterImplementedField => '';

  /*member: Super.extendedGetterDeclaredSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterDeclaredSetter => '';

  /*member: Super.extendedGetterMixedInSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterMixedInSetter => '';

  /*member: Super.extendedGetterImplementedSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedGetterImplementedSetter => '';

  /*member: Super.extendedFieldDeclaredSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  final String extendedFieldDeclaredSetter = '';

  /*member: Super.extendedFieldMixedInSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  final String extendedFieldMixedInSetter = '';

  /*member: Super.extendedFieldImplementedSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  final String extendedFieldImplementedSetter = '';

  /*member: Super.extendedSetterDeclaredField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterDeclaredField(int value) {}

  /*member: Super.extendedSetterMixedInField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterMixedInField(int value) {}

  /*member: Super.extendedSetterImplementedField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterImplementedField(int value) {}

  /*member: Super.extendedSetterDeclaredGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterDeclaredGetter(int value) {}

  /*member: Super.extendedSetterMixedInGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterMixedInGetter(int value) {}

  /*member: Super.extendedSetterImplementedGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  void set extendedSetterImplementedGetter(int value) {}
}

/*class: Mixin:
 maxInheritancePath=1,
 superclasses=[Object]
*/
abstract class Mixin {
  /*member: Mixin.extendedGetterMixedInField#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  /*member: Mixin.extendedGetterMixedInField=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  int extendedGetterMixedInField = 0;

  /*member: Mixin.extendedGetterMixedInSetter=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set extendedGetterMixedInSetter(int value) {}

  /*member: Mixin.extendedFieldMixedInSetter=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set extendedFieldMixedInSetter(int value) {}

  /*member: Mixin.extendedSetterMixedInField#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  final String extendedSetterMixedInField = '';

  /*member: Mixin.extendedSetterMixedInGetter#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  String get extendedSetterMixedInGetter => '';

  /*member: Mixin.mixedInGetterDeclaredField#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  String get mixedInGetterDeclaredField => '';

  /*member: Mixin.mixedInGetterImplementedField#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  String get mixedInGetterImplementedField => '';

  /*member: Mixin.mixedInGetterDeclaredSetter#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  String get mixedInGetterDeclaredSetter => '';

  /*member: Mixin.mixedInGetterImplementedSetter#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  String get mixedInGetterImplementedSetter => '';

  /*member: Mixin.mixedInFieldDeclaredSetter#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  final String mixedInFieldDeclaredSetter = '';

  /*member: Mixin.mixedInFieldImplementedSetter#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  final String mixedInFieldImplementedSetter = '';

  /*member: Mixin.mixedInSetterDeclaredField=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set mixedInSetterDeclaredField(int value) {}

  /*member: Mixin.mixedInSetterImplementedField=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set mixedInSetterImplementedField(int value) {}

  /*member: Mixin.mixedInSetterDeclaredGetter=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set mixedInSetterDeclaredGetter(int value) {}

  /*member: Mixin.mixedInSetterImplementedGetter=#cls:
   classBuilder=Mixin,
   isSourceDeclaration
  */
  void set mixedInSetterImplementedGetter(int value) {}
}

/*class: Interface1:
 maxInheritancePath=1,
 superclasses=[Object]
*/
abstract class Interface1 {
  /*member: Interface1.extendedGetterImplementedField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Interface1.extendedGetterImplementedField=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  int extendedGetterImplementedField = 0;

  /*member: Interface1.extendedGetterImplementedSetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set extendedGetterImplementedSetter(int value) {}

  /*member: Interface1.extendedFieldImplementedSetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set extendedFieldImplementedSetter(int value) {}

  /*member: Interface1.extendedSetterImplementedField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  final String extendedSetterImplementedField = '';

  /*member: Interface1.extendedSetterImplementedGetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get extendedSetterImplementedGetter => '';

  /*member: Interface1.mixedInGetterImplementedField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Interface1.mixedInGetterImplementedField=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  int mixedInGetterImplementedField = 0;

  /*member: Interface1.mixedInGetterImplementedSetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set mixedInGetterImplementedSetter(int value) {}

  /*member: Interface1.mixedInFieldImplementedSetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set mixedInFieldImplementedSetter(int value) {}

  /*member: Interface1.mixedInSetterImplementedField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  final String mixedInSetterImplementedField = '';

  /*member: Interface1.mixedInSetterImplementedGetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get mixedInSetterImplementedGetter => '';

  /*member: Interface1.implementedGetterDeclaredField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get implementedGetterDeclaredField => '';

  /*member: Interface1.implementedGetterImplementedField#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get implementedGetterImplementedField => '';

  /*member: Interface1.implementedGetterDeclaredSetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get implementedGetterDeclaredSetter => '';

  /*member: Interface1.implementedGetterImplementedSetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get implementedGetterImplementedSetter => '';

  /*member: Interface1.implementedFieldDeclaredSetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  final String implementedFieldDeclaredSetter = '';

  /*member: Interface1.implementedFieldImplementedSetter#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  final String implementedFieldImplementedSetter = '';

  /*member: Interface1.implementedSetterDeclaredField=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set implementedSetterDeclaredField(int value) {}

  /*member: Interface1.implementedSetterImplementedField=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set implementedSetterImplementedField(int value) {}

  /*member: Interface1.implementedSetterDeclaredGetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set implementedSetterDeclaredGetter(int value) {}

  /*member: Interface1.implementedSetterImplementedGetter=#cls:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  void set implementedSetterImplementedGetter(int value) {}
}

/*class: Interface2:
 maxInheritancePath=1,
 superclasses=[Object]
*/
abstract class Interface2 {
  /*member: Interface2.implementedGetterImplementedField#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  /*member: Interface2.implementedGetterImplementedField=#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  int implementedGetterImplementedField = 0;

  /*member: Interface2.implementedGetterImplementedSetter=#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  void set implementedGetterImplementedSetter(int value) {}

  /*member: Interface2.implementedFieldImplementedSetter=#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  void set implementedFieldImplementedSetter(int value) {}

  /*member: Interface2.implementedSetterImplementedField#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  final String implementedSetterImplementedField = '';

  /*member: Interface2.implementedSetterImplementedGetter#cls:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  String get implementedSetterImplementedGetter => '';
}

/*class: _Class&Super&Mixin:
 interfaces=[Mixin],
 maxInheritancePath=2,
 superclasses=[
  Object,
  Super]
*/

/*member: _Class&Super&Mixin.extendedGetterMixedInField#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInField
*/
/*member: _Class&Super&Mixin.extendedGetterMixedInField#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[
  Mixin.extendedGetterMixedInField,
  Super.extendedGetterMixedInField],
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInField
*/
/*member: _Class&Super&Mixin.extendedGetterMixedInField=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInField
*/
/*member: _Class&Super&Mixin.extendedGetterMixedInField=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.extendedGetterMixedInField=],
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInField
*/

/*member: _Class&Super&Mixin.extendedSetterMixedInField#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedSetterMixedInField
*/
/*member: _Class&Super&Mixin.extendedSetterMixedInField#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.extendedSetterMixedInField],
 isSynthesized,
 stubTarget=Mixin.extendedSetterMixedInField
*/
/*member: _Class&Super&Mixin.extendedSetterMixedInField=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedSetterMixedInGetter#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedSetterMixedInGetter
*/
/*member: _Class&Super&Mixin.extendedSetterMixedInGetter#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.extendedSetterMixedInGetter],
 isSynthesized,
 stubTarget=Mixin.extendedSetterMixedInGetter
*/
/*member: _Class&Super&Mixin.extendedSetterMixedInGetter=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.mixedInGetterDeclaredField#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInGetterDeclaredField
*/
/*member: _Class&Super&Mixin.mixedInGetterDeclaredField#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInGetterDeclaredField],
 isSynthesized,
 stubTarget=Mixin.mixedInGetterDeclaredField
*/

/*member: _Class&Super&Mixin.mixedInGetterImplementedField#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInGetterImplementedField
*/
/*member: _Class&Super&Mixin.mixedInGetterImplementedField#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInGetterImplementedField],
 isSynthesized,
 stubTarget=Mixin.mixedInGetterImplementedField
*/

/*member: _Class&Super&Mixin.mixedInGetterDeclaredSetter#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInGetterDeclaredSetter
*/
/*member: _Class&Super&Mixin.mixedInGetterDeclaredSetter#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInGetterDeclaredSetter],
 isSynthesized,
 stubTarget=Mixin.mixedInGetterDeclaredSetter
*/

/*member: _Class&Super&Mixin.mixedInGetterImplementedSetter#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInGetterImplementedSetter
*/
/*member: _Class&Super&Mixin.mixedInGetterImplementedSetter#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInGetterImplementedSetter],
 isSynthesized,
 stubTarget=Mixin.mixedInGetterImplementedSetter
*/

/*member: _Class&Super&Mixin.mixedInFieldDeclaredSetter#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInFieldDeclaredSetter
*/
/*member: _Class&Super&Mixin.mixedInFieldDeclaredSetter#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInFieldDeclaredSetter],
 isSynthesized,
 stubTarget=Mixin.mixedInFieldDeclaredSetter
*/

/*member: _Class&Super&Mixin.mixedInFieldImplementedSetter#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInFieldImplementedSetter
*/
/*member: _Class&Super&Mixin.mixedInFieldImplementedSetter#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInFieldImplementedSetter],
 isSynthesized,
 stubTarget=Mixin.mixedInFieldImplementedSetter
*/

/*member: _Class&Super&Mixin.extendedGetterMixedInSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/
/*member: _Class&Super&Mixin.extendedGetterMixedInSetter=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInSetter=
*/
/*member: _Class&Super&Mixin.extendedGetterMixedInSetter=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.extendedGetterMixedInSetter=],
 isSynthesized,
 stubTarget=Mixin.extendedGetterMixedInSetter=
*/

/*member: _Class&Super&Mixin.extendedFieldMixedInSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/
/*member: _Class&Super&Mixin.extendedFieldMixedInSetter=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.extendedFieldMixedInSetter=
*/
/*member: _Class&Super&Mixin.extendedFieldMixedInSetter=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.extendedFieldMixedInSetter=],
 isSynthesized,
 stubTarget=Mixin.extendedFieldMixedInSetter=
*/

/*member: _Class&Super&Mixin.extendedGetterDeclaredField#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedGetterImplementedField#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedGetterDeclaredSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedGetterImplementedSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedFieldDeclaredSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedFieldImplementedSetter#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.mixedInSetterDeclaredField=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInSetterDeclaredField=
*/
/*member: _Class&Super&Mixin.mixedInSetterDeclaredField=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInSetterDeclaredField=],
 isSynthesized,
 stubTarget=Mixin.mixedInSetterDeclaredField=
*/

/*member: _Class&Super&Mixin.mixedInSetterImplementedField=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInSetterImplementedField=
*/
/*member: _Class&Super&Mixin.mixedInSetterImplementedField=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInSetterImplementedField=],
 isSynthesized,
 stubTarget=Mixin.mixedInSetterImplementedField=
*/

/*member: _Class&Super&Mixin.mixedInSetterDeclaredGetter=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInSetterDeclaredGetter=
*/
/*member: _Class&Super&Mixin.mixedInSetterDeclaredGetter=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInSetterDeclaredGetter=],
 isSynthesized,
 stubTarget=Mixin.mixedInSetterDeclaredGetter=
*/

/*member: _Class&Super&Mixin.mixedInSetterImplementedGetter=#cls:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 isSynthesized,
 stubTarget=Mixin.mixedInSetterImplementedGetter=
*/
/*member: _Class&Super&Mixin.mixedInSetterImplementedGetter=#int:
 classBuilder=_Class&Super&Mixin,
 concreteMixinStub,
 declarations=[Mixin.mixedInSetterImplementedGetter=],
 isSynthesized,
 stubTarget=Mixin.mixedInSetterImplementedGetter=
*/

/*member: _Class&Super&Mixin.extendedSetterDeclaredField=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedSetterImplementedField=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedSetterDeclaredGetter=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*member: _Class&Super&Mixin.extendedSetterImplementedGetter=#cls:
 classBuilder=Super,
 isSourceDeclaration
*/

/*class: Class:
 interfaces=[
  Interface1,
  Interface2,
  Mixin],
 maxInheritancePath=3,
 superclasses=[
  Object,
  Super,
  _Class&Super&Mixin]
*/
abstract class Class extends Super
    with Mixin
    implements Interface1, Interface2 {
  /*member: Class.extendedGetterMixedInField#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInField
  */
  /*member: Class.extendedGetterMixedInField#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[
    Mixin.extendedGetterMixedInField,
    Super.extendedGetterMixedInField],
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInField
  */
  /*member: Class.extendedGetterMixedInField=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInField=
  */
  /*member: Class.extendedGetterMixedInField=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.extendedGetterMixedInField=],
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInField=
  */

  /*member: Class.extendedSetterMixedInField#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedSetterMixedInField
  */
  /*member: Class.extendedSetterMixedInField#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.extendedSetterMixedInField],
   isSynthesized,
   member=_Class&Super&Mixin.extendedSetterMixedInField
  */
  /*member: Class.extendedSetterMixedInField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */

  /*member: Class.extendedSetterMixedInGetter#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedSetterMixedInGetter
  */
  /*member: Class.extendedSetterMixedInGetter#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.extendedSetterMixedInGetter],
   isSynthesized,
   member=_Class&Super&Mixin.extendedSetterMixedInGetter
  */
  /*member: Class.extendedSetterMixedInGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */

  /*member: Class.mixedInGetterImplementedField#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterImplementedField
  */
  /*member: Class.mixedInGetterImplementedField#int:
   classBuilder=Class,
   declarations=[
    Interface1.mixedInGetterImplementedField,
    _Class&Super&Mixin.mixedInGetterImplementedField],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterImplementedField
  */
  /*member: Class.mixedInGetterImplementedField=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.mixedInGetterImplementedSetter#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterImplementedSetter
  */
  /*member: Class.mixedInGetterImplementedSetter#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInGetterImplementedSetter],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterImplementedSetter
  */
  /*member: Class.mixedInGetterImplementedSetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.mixedInFieldImplementedSetter#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInFieldImplementedSetter
  */
  /*member: Class.mixedInFieldImplementedSetter#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInFieldImplementedSetter],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInFieldImplementedSetter
  */
  /*member: Class.mixedInFieldImplementedSetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.extendedGetterMixedInSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedGetterMixedInSetter=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInSetter=
  */
  /*member: Class.extendedGetterMixedInSetter=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.extendedGetterMixedInSetter=],
   isSynthesized,
   member=_Class&Super&Mixin.extendedGetterMixedInSetter=
  */

  /*member: Class.extendedFieldMixedInSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedFieldMixedInSetter=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.extendedFieldMixedInSetter=
  */
  /*member: Class.extendedFieldMixedInSetter=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.extendedFieldMixedInSetter=],
   isSynthesized,
   member=_Class&Super&Mixin.extendedFieldMixedInSetter=
  */

  /*member: Class.extendedGetterImplementedField#cls:
   classBuilder=Class,
   isSynthesized,
   member=Super.extendedGetterImplementedField
  */
  /*member: Class.extendedGetterImplementedField#int:
   classBuilder=Class,
   declarations=[
    Interface1.extendedGetterImplementedField,
    Super.extendedGetterImplementedField],
   isSynthesized,
   member=Super.extendedGetterImplementedField
  */
  /*member: Class.extendedGetterImplementedField=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.extendedGetterImplementedSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedGetterImplementedSetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.extendedFieldImplementedSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedFieldImplementedSetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.mixedInSetterImplementedField#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.mixedInSetterImplementedField=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterImplementedField=
  */
  /*member: Class.mixedInSetterImplementedField=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInSetterImplementedField=],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterImplementedField=
  */

  /*member: Class.mixedInSetterImplementedGetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.mixedInSetterImplementedGetter=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterImplementedGetter=
  */
  /*member: Class.mixedInSetterImplementedGetter=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInSetterImplementedGetter=],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterImplementedGetter=
  */

  /*member: Class.extendedSetterImplementedField#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.extendedSetterImplementedField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */

  /*member: Class.extendedSetterImplementedGetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.extendedSetterImplementedGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */

  /*member: Class.implementedGetterImplementedField#int:
   classBuilder=Class,
   declarations=[
    Interface1.implementedGetterImplementedField,
    Interface2.implementedGetterImplementedField],
   isSynthesized,
   member=Interface1.implementedGetterImplementedField
  */
  /*member: Class.implementedGetterImplementedField=#int:
   classBuilder=Interface2,
   isSourceDeclaration
  */

  /*member: Class.implementedGetterImplementedSetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.implementedGetterImplementedSetter=#int:
   classBuilder=Interface2,
   isSourceDeclaration
  */

  /*member: Class.implementedFieldImplementedSetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.implementedFieldImplementedSetter=#int:
   classBuilder=Interface2,
   isSourceDeclaration
  */

  /*member: Class.implementedSetterImplementedField#int:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  /*member: Class.implementedSetterImplementedField=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.implementedSetterImplementedGetter#int:
   classBuilder=Interface2,
   isSourceDeclaration
  */
  /*member: Class.implementedSetterImplementedGetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */

  /*member: Class.extendedGetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedGetterDeclaredField],
   isSourceDeclaration
  */
  /*member: Class.extendedGetterDeclaredField=#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedGetterDeclaredField],
   isSourceDeclaration
  */
  int extendedGetterDeclaredField = 0;

  /*member: Class.extendedGetterDeclaredSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedGetterDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedGetterDeclaredSetter],
   isSourceDeclaration
  */
  void set extendedGetterDeclaredSetter(int value) {}

  /*member: Class.extendedFieldDeclaredSetter#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  /*member: Class.extendedFieldDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedFieldDeclaredSetter],
   isSourceDeclaration
  */
  void set extendedFieldDeclaredSetter(int value) {}

  /*member: Class.extendedSetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedSetterDeclaredField=],
   isSourceDeclaration
  */
  /*member: Class.extendedSetterDeclaredField=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  final String extendedSetterDeclaredField = '';

  /*member: Class.extendedSetterDeclaredGetter#cls:
   classBuilder=Class,
   declared-overrides=[Super.extendedSetterDeclaredGetter=],
   isSourceDeclaration
  */
  /*member: Class.extendedSetterDeclaredGetter=#cls:
   classBuilder=Super,
   isSourceDeclaration
  */
  String get extendedSetterDeclaredGetter => '';

  /*member: Class.mixedInGetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredField],
   isSourceDeclaration
  */
  /*member: Class.mixedInGetterDeclaredField=#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredField],
   isSourceDeclaration
  */
  int mixedInGetterDeclaredField = 0;

  /*member: Class.mixedInGetterDeclaredSetter#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterDeclaredSetter
  */
  /*member: Class.mixedInGetterDeclaredSetter#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInGetterDeclaredSetter],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInGetterDeclaredSetter
  */
  /*member: Class.mixedInGetterDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredSetter],
   isSourceDeclaration
  */
  void set mixedInGetterDeclaredSetter(int value) {}

  /*member: Class.mixedInFieldDeclaredSetter#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInFieldDeclaredSetter
  */
  /*member: Class.mixedInFieldDeclaredSetter#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInFieldDeclaredSetter],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInFieldDeclaredSetter
  */
  /*member: Class.mixedInFieldDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInFieldDeclaredSetter],
   isSourceDeclaration
  */
  void set mixedInFieldDeclaredSetter(int value) {}

  /*member: Class.mixedInSetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInSetterDeclaredField=],
   isSourceDeclaration
  */
  /*member: Class.mixedInSetterDeclaredField=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterDeclaredField=
  */
  /*member: Class.mixedInSetterDeclaredField=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInSetterDeclaredField=],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterDeclaredField=
  */
  final String mixedInSetterDeclaredField = '';

  /*member: Class.mixedInSetterDeclaredGetter#cls:
   classBuilder=Class,
   declared-overrides=[_Class&Super&Mixin.mixedInSetterDeclaredGetter=],
   isSourceDeclaration
  */
  /*member: Class.mixedInSetterDeclaredGetter=#cls:
   classBuilder=Class,
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterDeclaredGetter=
  */
  /*member: Class.mixedInSetterDeclaredGetter=#int:
   classBuilder=_Class&Super&Mixin,
   declarations=[Mixin.mixedInSetterDeclaredGetter=],
   isSynthesized,
   member=_Class&Super&Mixin.mixedInSetterDeclaredGetter=
  */
  String get mixedInSetterDeclaredGetter => '';

  /*member: Class.implementedGetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedGetterDeclaredField],
   isSourceDeclaration
  */
  /*member: Class.implementedGetterDeclaredField=#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedGetterDeclaredField],
   isSourceDeclaration
  */
  int implementedGetterDeclaredField = 0;

  /*member: Class.implementedGetterDeclaredSetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.implementedGetterDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedGetterDeclaredSetter],
   isSourceDeclaration
  */
  void set implementedGetterDeclaredSetter(int value) {}

  /*member: Class.implementedFieldDeclaredSetter#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  /*member: Class.implementedFieldDeclaredSetter=#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedFieldDeclaredSetter],
   isSourceDeclaration
  */
  void set implementedFieldDeclaredSetter(int value) {}

  /*member: Class.implementedSetterDeclaredField#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedSetterDeclaredField=],
   isSourceDeclaration
  */
  /*member: Class.implementedSetterDeclaredField=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  final String implementedSetterDeclaredField = '';

  /*member: Class.implementedSetterDeclaredGetter#cls:
   classBuilder=Class,
   declared-overrides=[Interface1.implementedSetterDeclaredGetter=],
   isSourceDeclaration
  */

  /*member: Class.implementedSetterDeclaredGetter=#int:
   classBuilder=Interface1,
   isSourceDeclaration
  */
  String get implementedSetterDeclaredGetter => '';

  /*member: Class.declaredGetterDeclaredSetter#cls:
   classBuilder=Class,
   isSourceDeclaration
  */
  String get declaredGetterDeclaredSetter => '';

  /*member: Class.declaredGetterDeclaredSetter=#cls:
   classBuilder=Class,
   isSourceDeclaration
  */
  void set declaredGetterDeclaredSetter(int value) {}

  /*member: Class.declaredFieldDeclaredSetter#cls:
   classBuilder=Class,
   isSourceDeclaration
  */
  final String declaredFieldDeclaredSetter = '';

  /*member: Class.declaredFieldDeclaredSetter=#cls:
   classBuilder=Class,
   isSourceDeclaration
  */
  void set declaredFieldDeclaredSetter(int value) {}
}

main() {}
