import java.util.Collection;
import java.util.Collections;

class IDEABug {

  static class ClassA {
    static <T> void sayHello(Collection<? extends T> msg) {}
  }

  static class ClassB extends ClassA {
    <error descr="'sayHello(Collection<? extends T>)' in 'IDEABug.ClassB' clashes with 'sayHello(Collection<? extends T>)' in 'IDEABug.ClassA'; both methods have same erasure, yet neither hides the other">static <T extends String> void sayHello(Collection<? extends T> msg)</error> {}
  }

  public static void main(String[] args) {
    ClassB.sayHello(Collections.<String>emptyList());
  }
}
