// 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 file.

// @dart = 2.9

// This test case is a reduction of some Flutter code.  We wish to verify that
// the class _DismissibleState doesn't have any type inference errors.

class _DismissibleState extends State<Dismissible>
    with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {}

abstract class State<T extends StatefulWidget> extends Diagnosticable {}

abstract class StatefulWidget extends Widget {}

abstract class Widget extends DiagnosticableTree {}

abstract class DiagnosticableTree extends Diagnosticable {}

abstract class Diagnosticable {}

class Dismissible extends StatefulWidget {}

mixin TickerProviderStateMixin<T extends StatefulWidget> on State<T>
    implements TickerProvider {}

abstract class TickerProvider {}

mixin AutomaticKeepAliveClientMixin<T extends StatefulWidget> on State<T> {}

main() {
  new _DismissibleState();
}
