class Super {
  int get extendedConcreteGetter => 0;
  int get extendedAbstractGetter;
  int get extendedConcreteMixedInConcreteGetter => 0;
  int get extendedAbstractMixedInConcreteGetter;
  int get extendedConcreteMixedInAbstractGetter => 0;
  int get extendedAbstractMixedInAbstractGetter;
}

class Mixin {
  int get mixedInConcreteGetter => 0;
  int get mixedInAbstractGetter;
  int get extendedConcreteMixedInConcreteGetter => 0;
  int get extendedAbstractMixedInConcreteGetter => 0;
  int get extendedConcreteMixedInAbstractGetter;
  int get extendedAbstractMixedInAbstractGetter;
}

class ClassMixin extends Super with Mixin {}

class NamedMixin = Super with Mixin;
main() {}
