library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class Mixin extends core::Object {
  field dynamic field = null;
  synthetic constructor •() → self::Mixin
    : super core::Object::•()
    ;
}
abstract class _A&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A&Object&Mixin
    : super core::Object::•()
    ;
  mixin-super-stub get field() → dynamic
    return super.{self::Mixin::field};
  mixin-super-stub set field(dynamic value) → void
    return super.{self::Mixin::field} = value;
}
abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A&Object&Mixin&Mixin
    : super self::_A&Object&Mixin::•()
    ;
  mixin-super-stub get field() → dynamic
    return super.{self::Mixin::field};
  mixin-super-stub set field(dynamic value) → void
    return super.{self::Mixin::field} = value;
}
class A extends self::_A&Object&Mixin&Mixin {
  synthetic constructor •() → self::A
    : super self::_A&Object&Mixin&Mixin::•()
    ;
}
