// 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: compile-time error
  method4(T t) => null; //# 04: compile-time error
  method5(T t) => null; //# 05: ok
  method7(T t) => null; //# 07: compile-time error
}

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: compile-time error
}

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: compile-time error
  method9(U u) => null; //# 09: compile-time error
  method10(U u) => null; //# 10: compile-time error
}

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();
}
