// Copyright (c) 2015, 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

// Test doesn't cover http://dartbug.com/23089 anymore.
// Generic bounds now must be fully instantiated. This means that the
// cycle is not possible anymore.

abstract class IPeer<C extends IP2PClient /*@compile-error=unspecified*/ > {}

abstract class IPeerRoom<P extends IPeer, C extends IP2PClient> {}

abstract class IP2PClient<R extends IPeerRoom> {}

class _Peer<C extends _P2PClient> implements IPeer<C> {}

class _PeerRoom<P extends _Peer, C extends _P2PClient>
    implements IPeerRoom<P, C> {}

abstract class _P2PClient<R extends _PeerRoom, P extends _Peer>
    implements IP2PClient<R> {}

void main() {}
