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

class A<T> {
  method1(T t) => null; /// 01: ok
  method2(T t) => null; /// 02: ok
  method4(T t) => null; /// 04: static type warning
  method5(T t) => null; /// 05: ok
  method7(T t) => null; /// 07: static type warning
}

class B<S> extends A
<S> /// 01: continued
<num> /// 02: continued
<S> /// 04: continued
<S> /// 05: continued
{
  method1(S s) => null; /// 01: continued
  method2(int i) => null; /// 02: continued
  method3(S s) => null; /// 03: ok
  method4(int i) => null; /// 04: continued
  method6(S s) => null; /// 06: static type warning
}

abstract class I<U> {
  method3(U u) => null; /// 03: continued
  method6(U u) => null; /// 06: continued
  method7(U u) => null; /// 07: continued
  method8(U u) => null; /// 08: static type warning
  method9(U u) => null; /// 09: static type warning
  method10(U u) => null; /// 10: static type warning
}

abstract class J<V> {
  method8(V v) => null; /// 08: continued
  method9(V v) => null; /// 09: continued
  method10(V v) => null; /// 10: continued
}

abstract class Class<W> extends B
<double> /// 03: continued
<W> /// 05: continued
<W> /// 06: continued
<int> /// 07: continued
implements I
<int> /// 03: continued
<num> /// 06: continued
<String> /// 07: continued
<int> /// 08: continued
<int> /// 09: continued
<int> /// 10: continued
, J
<String> /// 08: continued
<num> /// 09: continued
<num> /// 10: continued
{
  method3(num i) => null; /// 03: continued
  method5(W w) => null; /// 05: continued
  method6(int i) => null; /// 06: continued
  method7(double d) => null; /// 07: continued
  method8(double d) => null; /// 08: continued
}

class SubClass extends Class {
  method9(double d) => null; /// 09: continued
  method10(String s) => null; /// 10: continued
}

main() {
  new SubClass();
}
