# Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE.md file.

# Compile. Use mixins.

type: basic
entry: a.dart
invalidate:
  - a.dart
sources:
  a.dart: |
    import 'b.dart';
    class A extends Object with B<C>, D {}
  b.dart: |
    mixin B<ChildType extends Object> {
      ChildType get child => null;
      set child(ChildType value) {}
    }

    class C {}

    mixin D<T extends Object> on B<T> {}
