library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/abstract_super_application.dart:26:7: Error: 'Object' doesn't implement 'Super' so it can't be used with 'Mixin'.
//  - 'Object' is from 'dart:core'.
//  - 'Super' is from 'pkg/front_end/testcases/general/abstract_super_application.dart'.
//  - 'Mixin' is from 'pkg/front_end/testcases/general/abstract_super_application.dart'.
// class Class2 with Mixin implements Super {}
//       ^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  field core::int property;
  synthetic constructor •() → self::Super
    ;
  method method() → void
    ;
}
abstract class Mixin extends self::Super /*isMixinDeclaration*/  {
  method method() → void
    ;
  get property() → core::int
    ;
  set property(core::int value) → void
    ;
}
class Class1 extends self::_Class1&Super&Mixin {
  synthetic constructor •() → self::Class1
    ;
}
class Class2 extends self::_Class2&Object&Mixin implements self::Super {
  synthetic constructor •() → self::Class2
    ;
}
abstract class _Class1&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class1&Super&Mixin
    : super self::Super::•()
    ;
  synthetic mixin-super-stub method method() → void
    return super.{self::Mixin::method}();
  synthetic mixin-super-stub get property() → core::int
    return super.{self::Mixin::property};
  synthetic mixin-super-stub set property(core::int value) → void
    return super.{self::Mixin::property} = value;
}
abstract class _Class2&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Class2&Object&Mixin
    : super core::Object::•()
    ;
  synthetic mixin-super-stub method method() → void
    return super.{self::Mixin::method}();
  synthetic mixin-super-stub get property() → core::int
    return super.{self::Mixin::property};
  synthetic mixin-super-stub set property(core::int value) → void
    return super.{self::Mixin::property} = value;
}
