# 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 in strong mode. Use mixins.

type: basic
entry: a.dart
strong: true
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> {}
