# 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<Object> {}
  b.dart: |
    abstract class B<ChildType extends Object> extends Object {
      ChildType get child => null;
      set child(ChildType value) {}
    }

    class C extends Object {}

    abstract class D<T extends Object> extends Object with B<T> {}