library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedGetterMixedInField'.
// abstract class Class extends Super
//                ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: The return type of the method 'Mixin.extendedGetterMixedInField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterMixedInField'.
// Change to a subtype of 'String'.
//   int extendedGetterMixedInField = 0;
//       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is the overridden method ('extendedGetterMixedInField').
//   String get extendedGetterMixedInField => '';
//              ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Super with Mixin' inherits multiple members named 'extendedGetterMixedInField' with incompatible signatures.
// Try adding a declaration of 'extendedGetterMixedInField' to 'Super with Mixin'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: This is one of the overridden members.
//   int extendedGetterMixedInField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is one of the overridden members.
//   String get extendedGetterMixedInField => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
//   void set extendedSetterMixedInField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
//   void set extendedSetterMixedInGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
//   String get extendedGetterMixedInSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
//   final String extendedFieldMixedInSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:90:7: Error: The return type of the method 'Class.extendedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterDeclaredField'.
// Change to a subtype of 'String'.
//   int extendedGetterDeclaredField = 0;
//       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:6:14: Context: This is the overridden method ('extendedGetterDeclaredField').
//   String get extendedGetterDeclaredField => '';
//              ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:93:16: Error: The type 'String' of the field 'Class.extendedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredField'.
//   final String extendedSetterDeclaredField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:18:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredField'.
//   void set extendedSetterDeclaredField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:94:14: Error: The type 'String' of the getter 'Class.extendedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredGetter'.
//   String get extendedSetterDeclaredGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:22:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredGetter'.
//   void set extendedSetterDeclaredGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:96:7: Error: The return type of the method 'Class.mixedInGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super with Mixin.mixedInGetterDeclaredField'.
// Change to a subtype of 'String'.
//   int mixedInGetterDeclaredField = 0;
//       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the overridden method ('mixedInGetterDeclaredField').
// abstract class Class extends Super
//                ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:99:16: Error: The type 'String' of the field 'Class.mixedInSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredField'.
//   final String mixedInSetterDeclaredField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredField'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:100:14: Error: The type 'String' of the getter 'Class.mixedInSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
//   String get mixedInSetterDeclaredGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:102:7: Error: The return type of the method 'Class.implementedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Interface1.implementedGetterDeclaredField'.
// Change to a subtype of 'String'.
//   int implementedGetterDeclaredField = 0;
//       ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:63:14: Context: This is the overridden method ('implementedGetterDeclaredField').
//   String get implementedGetterDeclaredField => '';
//              ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:105:16: Error: The type 'String' of the field 'Class.implementedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredField'.
//   final String implementedSetterDeclaredField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:72:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredField'.
//   void set implementedSetterDeclaredField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:106:14: Error: The type 'String' of the getter 'Class.implementedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredGetter'.
//   String get implementedSetterDeclaredGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:75:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredGetter'.
//   void set implementedSetterDeclaredGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:108:14: Error: The type 'String' of the getter 'Class.declaredGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredGetterDeclaredSetter'.
//   String get declaredGetterDeclaredSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:109:12: Context: This is the declaration of the setter 'Class.declaredGetterDeclaredSetter'.
//   void set declaredGetterDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:111:16: Error: The type 'String' of the getter 'Class.declaredFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredFieldDeclaredSetter'.
//   final String declaredFieldDeclaredSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:112:12: Context: This is the declaration of the setter 'Class.declaredFieldDeclaredSetter'.
//   void set declaredFieldDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:91:12: Error: The type 'String' of the inherited getter 'Super.extendedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedGetterDeclaredSetter'.
//   void set extendedGetterDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:10:14: Context: This is the declaration of the getter 'Super.extendedGetterDeclaredSetter'.
//   String get extendedGetterDeclaredSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:92:12: Error: The type 'String' of the inherited field 'Super.extendedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedFieldDeclaredSetter'.
//   void set extendedFieldDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:14:16: Context: This is the declaration of the field 'Super.extendedFieldDeclaredSetter'.
//   final String extendedFieldDeclaredSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:97:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInGetterDeclaredSetter'.
//   void set mixedInGetterDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterDeclaredSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:98:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInFieldDeclaredSetter'.
//   void set mixedInFieldDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldDeclaredSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:103:12: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedGetterDeclaredSetter'.
//   void set implementedGetterDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:66:14: Context: This is the declaration of the getter 'Interface1.implementedGetterDeclaredSetter'.
//   String get implementedGetterDeclaredSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:104:12: Error: The type 'String' of the inherited field 'Interface1.implementedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedFieldDeclaredSetter'.
//   void set implementedFieldDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:69:16: Context: This is the declaration of the field 'Interface1.implementedFieldDeclaredSetter'.
//   final String implementedFieldDeclaredSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInField'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
//   void set extendedSetterMixedInField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInGetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
//   void set extendedSetterMixedInGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'Mixin.mixedInGetterImplementedField' with incompatible signatures.
// Try adding a declaration of 'Mixin.mixedInGetterImplementedField' to 'Class'.
// abstract class Class extends Super
//                ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is one of the overridden members.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is one of the overridden members.
//   int mixedInGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedField'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedField'.
//   int mixedInGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:58:12: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedSetter'.
//   void set mixedInGetterImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInFieldImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldImplementedSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:59:12: Context: This is the declaration of the setter 'Interface1.mixedInFieldImplementedSetter'.
//   void set mixedInFieldImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedGetterMixedInSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
//   String get extendedGetterMixedInSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedFieldMixedInSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
//   final String extendedFieldMixedInSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'extendedGetterImplementedField' with incompatible signatures.
// Try adding a declaration of 'extendedGetterImplementedField' to 'Class'.
// abstract class Class extends Super
//                ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is one of the overridden members.
//   String get extendedGetterImplementedField => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is one of the overridden members.
//   int extendedGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedField'.
//   String get extendedGetterImplementedField => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedField'.
//   int extendedGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:12:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedSetter'.
//   String get extendedGetterImplementedSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:52:12: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedSetter'.
//   void set extendedGetterImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedFieldImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:16:16: Context: This is the declaration of the field 'Super.extendedFieldImplementedSetter'.
//   final String extendedFieldImplementedSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:53:12: Context: This is the declaration of the setter 'Interface1.extendedFieldImplementedSetter'.
//   void set extendedFieldImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.mixedInSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:60:16: Context: This is the declaration of the field 'Interface1.mixedInSetterImplementedField'.
//   final String mixedInSetterImplementedField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedField'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.mixedInSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedGetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:61:14: Context: This is the declaration of the getter 'Interface1.mixedInSetterImplementedGetter'.
//   String get mixedInSetterImplementedGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedGetter'.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^^^^^...
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.extendedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:54:16: Context: This is the declaration of the field 'Interface1.extendedSetterImplementedField'.
//   final String extendedSetterImplementedField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:20:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedField'.
//   void set extendedSetterImplementedField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.extendedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedGetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:55:14: Context: This is the declaration of the getter 'Interface1.extendedSetterImplementedGetter'.
//   String get extendedSetterImplementedGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:24:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedGetter'.
//   void set extendedSetterImplementedGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'implementedGetterImplementedField' with incompatible signatures.
// Try adding a declaration of 'implementedGetterImplementedField' to 'Class'.
// abstract class Class extends Super
//                ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is one of the overridden members.
//   String get implementedGetterImplementedField => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is one of the overridden members.
//   int implementedGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedField'.
//   String get implementedGetterImplementedField => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedField'.
//   int implementedGetterImplementedField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:67:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedSetter'.
//   String get implementedGetterImplementedSetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:81:12: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedSetter'.
//   void set implementedGetterImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.implementedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedFieldImplementedSetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:70:16: Context: This is the declaration of the field 'Interface1.implementedFieldImplementedSetter'.
//   final String implementedFieldImplementedSetter = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:82:12: Context: This is the declaration of the setter 'Interface2.implementedFieldImplementedSetter'.
//   void set implementedFieldImplementedSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface2.implementedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedField'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:83:16: Context: This is the declaration of the field 'Interface2.implementedSetterImplementedField'.
//   final String implementedSetterImplementedField = '';
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:73:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedField'.
//   void set implementedSetterImplementedField(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface2.implementedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedGetter'.
// abstract class Class extends Super
//                ^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:84:14: Context: This is the declaration of the getter 'Interface2.implementedSetterImplementedGetter'.
//   String get implementedSetterImplementedGetter => '';
//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:76:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedGetter'.
//   void set implementedSetterImplementedGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class Super extends core::Object {
  final field core::String extendedFieldDeclaredSetter = "";
  final field core::String extendedFieldMixedInSetter = "";
  final field core::String extendedFieldImplementedSetter = "";
  synthetic constructor •() → self::Super
    : super core::Object::•()
    ;
  get extendedGetterDeclaredField() → core::String
    return "";
  get extendedGetterMixedInField() → core::String
    return "";
  get extendedGetterImplementedField() → core::String
    return "";
  get extendedGetterDeclaredSetter() → core::String
    return "";
  get extendedGetterMixedInSetter() → core::String
    return "";
  get extendedGetterImplementedSetter() → core::String
    return "";
  set extendedSetterDeclaredField(core::int value) → void {}
  set extendedSetterMixedInField(core::int value) → void {}
  set extendedSetterImplementedField(core::int value) → void {}
  set extendedSetterDeclaredGetter(core::int value) → void {}
  set extendedSetterMixedInGetter(core::int value) → void {}
  set extendedSetterImplementedGetter(core::int value) → void {}
}
abstract class Mixin extends core::Object {
  field core::int extendedGetterMixedInField = 0;
  final field core::String extendedSetterMixedInField = "";
  final field core::String mixedInFieldDeclaredSetter = "";
  final field core::String mixedInFieldImplementedSetter = "";
  synthetic constructor •() → self::Mixin
    : super core::Object::•()
    ;
  set extendedGetterMixedInSetter(core::int value) → void {}
  set extendedFieldMixedInSetter(core::int value) → void {}
  get extendedSetterMixedInGetter() → core::String
    return "";
  get mixedInGetterDeclaredField() → core::String
    return "";
  get mixedInGetterImplementedField() → core::String
    return "";
  get mixedInGetterDeclaredSetter() → core::String
    return "";
  get mixedInGetterImplementedSetter() → core::String
    return "";
  set mixedInSetterDeclaredField(core::int value) → void {}
  set mixedInSetterImplementedField(core::int value) → void {}
  set mixedInSetterDeclaredGetter(core::int value) → void {}
  set mixedInSetterImplementedGetter(core::int value) → void {}
}
abstract class Interface1 extends core::Object {
  field core::int extendedGetterImplementedField = 0;
  final field core::String extendedSetterImplementedField = "";
  field core::int mixedInGetterImplementedField = 0;
  final field core::String mixedInSetterImplementedField = "";
  final field core::String implementedFieldDeclaredSetter = "";
  final field core::String implementedFieldImplementedSetter = "";
  synthetic constructor •() → self::Interface1
    : super core::Object::•()
    ;
  set extendedGetterImplementedSetter(core::int value) → void {}
  set extendedFieldImplementedSetter(core::int value) → void {}
  get extendedSetterImplementedGetter() → core::String
    return "";
  set mixedInGetterImplementedSetter(core::int value) → void {}
  set mixedInFieldImplementedSetter(core::int value) → void {}
  get mixedInSetterImplementedGetter() → core::String
    return "";
  get implementedGetterDeclaredField() → core::String
    return "";
  get implementedGetterImplementedField() → core::String
    return "";
  get implementedGetterDeclaredSetter() → core::String
    return "";
  get implementedGetterImplementedSetter() → core::String
    return "";
  set implementedSetterDeclaredField(core::int value) → void {}
  set implementedSetterImplementedField(core::int value) → void {}
  set implementedSetterDeclaredGetter(core::int value) → void {}
  set implementedSetterImplementedGetter(core::int value) → void {}
}
abstract class Interface2 extends core::Object {
  field core::int implementedGetterImplementedField = 0;
  final field core::String implementedSetterImplementedField = "";
  synthetic constructor •() → self::Interface2
    : super core::Object::•()
    ;
  set implementedGetterImplementedSetter(core::int value) → void {}
  set implementedFieldImplementedSetter(core::int value) → void {}
  get implementedSetterImplementedGetter() → core::String
    return "";
}
abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class&Super&Mixin
    : super self::Super::•()
    ;
  mixin-super-stub get mixedInGetterDeclaredField() → core::String
    return super.{self::Mixin::mixedInGetterDeclaredField};
  mixin-super-stub set mixedInSetterDeclaredField(core::int value) → void
    return super.{self::Mixin::mixedInSetterDeclaredField} = value;
  mixin-super-stub get mixedInGetterDeclaredSetter() → core::String
    return super.{self::Mixin::mixedInGetterDeclaredSetter};
  mixin-super-stub get mixedInFieldDeclaredSetter() → core::String
    return super.{self::Mixin::mixedInFieldDeclaredSetter};
  mixin-super-stub set extendedGetterMixedInField(core::int value) → void
    return super.{self::Mixin::extendedGetterMixedInField} = value;
  mixin-super-stub get extendedSetterMixedInField() → core::String
    return super.{self::Mixin::extendedSetterMixedInField};
  mixin-super-stub get extendedSetterMixedInGetter() → core::String
    return super.{self::Mixin::extendedSetterMixedInGetter};
  mixin-super-stub set extendedGetterMixedInSetter(core::int value) → void
    return super.{self::Mixin::extendedGetterMixedInSetter} = value;
  mixin-super-stub set extendedFieldMixedInSetter(core::int value) → void
    return super.{self::Mixin::extendedFieldMixedInSetter} = value;
  mixin-super-stub set mixedInSetterDeclaredGetter(core::int value) → void
    return super.{self::Mixin::mixedInSetterDeclaredGetter} = value;
  mixin-super-stub get mixedInGetterImplementedField() → core::String
    return super.{self::Mixin::mixedInGetterImplementedField};
  mixin-super-stub get mixedInGetterImplementedSetter() → core::String
    return super.{self::Mixin::mixedInGetterImplementedSetter};
  mixin-super-stub get mixedInFieldImplementedSetter() → core::String
    return super.{self::Mixin::mixedInFieldImplementedSetter};
  mixin-super-stub set mixedInSetterImplementedField(core::int value) → void
    return super.{self::Mixin::mixedInSetterImplementedField} = value;
  mixin-super-stub set mixedInSetterImplementedGetter(core::int value) → void
    return super.{self::Mixin::mixedInSetterImplementedGetter} = value;
}
abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
  field core::int extendedGetterDeclaredField = 0;
  final field core::String extendedSetterDeclaredField = "";
  field core::int mixedInGetterDeclaredField = 0;
  final field core::String mixedInSetterDeclaredField = "";
  field core::int implementedGetterDeclaredField = 0;
  final field core::String implementedSetterDeclaredField = "";
  final field core::String declaredFieldDeclaredSetter = "";
  synthetic constructor •() → self::Class
    : super self::_Class&Super&Mixin::•()
    ;
  set extendedGetterDeclaredSetter(core::int value) → void {}
  set extendedFieldDeclaredSetter(core::int value) → void {}
  get extendedSetterDeclaredGetter() → core::String
    return "";
  set mixedInGetterDeclaredSetter(core::int value) → void {}
  set mixedInFieldDeclaredSetter(core::int value) → void {}
  get mixedInSetterDeclaredGetter() → core::String
    return "";
  set implementedGetterDeclaredSetter(core::int value) → void {}
  set implementedFieldDeclaredSetter(core::int value) → void {}
  get implementedSetterDeclaredGetter() → core::String
    return "";
  get declaredGetterDeclaredSetter() → core::String
    return "";
  set declaredGetterDeclaredSetter(core::int value) → void {}
  set declaredFieldDeclaredSetter(core::int value) → void {}
}
static method main() → dynamic {}
