library test.mixin_library;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
//   foo() => super.foo() + f();
//                  ^^^
//
import self as self;
import "dart:core" as core;

abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
  field dynamic x = self::f();
  field dynamic y = null;
  field dynamic z = null;
  covariant-by-class field self::Mixin::T? t = null;
  method foo() → dynamic
    return invalid-expression "pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
  foo() => super.foo() + f();
                 ^^^"{<invalid>}.+(self::f());
  method g(covariant-by-class self::Mixin::T% a) → self::Mixin::T?
    return null;
  method h() → dynamic
    return self::V();
  method l() → dynamic
    return self::_private();
  method _privateMethod() → dynamic
    return 49;
  method publicMethod() → dynamic
    return this.{self::Mixin::_privateMethod}(){() → dynamic};
}
static method f() → dynamic
  return 2;
static method V() → dynamic
  return 87;
static method _private() → dynamic
  return 117;
static method foo(dynamic m) → dynamic
  return m{dynamic}._privateMethod();
