class Test {
    interface IFactory {
        Object m();
    }
    
    interface FooToInt {
      int m(Foo<?> foo);
    }

    @interface Anno {}

    enum E {}

    interface I {}

    static class Foo<X> { }

    static abstract class ABar {
      protected ABar() {
      }
    }

    static abstract class ABaz {
    }

    void foo(IFactory cf) { }

    void testAssign() {
        IFactory c1 = <error descr="'Anno' is abstract; cannot be instantiated">Anno::new</error>;
        IFactory c2 = <error descr="Enum types cannot be instantiated">E::new</error>;
        IFactory c3 = <error descr="'I' is abstract; cannot be instantiated">I::new</error>;
        IFactory c4 = <error descr="Unexpected wildcard">Foo<?></error>::new;
        IFactory c5 = <error descr="Cannot find class 1">1</error>::new;
        IFactory c6 = <error descr="'ABar' is abstract; cannot be instantiated">ABar::new</error>;
        IFactory c7 = <error descr="'ABaz' is abstract; cannot be instantiated">ABaz::new</error>;
        
        FooToInt fooToInt = Foo<?>::hashCode;

        foo(<error descr="'Anno' is abstract; cannot be instantiated">Anno::new</error>);
        foo(<error descr="Enum types cannot be instantiated">E::new</error>);
        foo(<error descr="'I' is abstract; cannot be instantiated">I::new</error>);
        foo(<error descr="Unexpected wildcard">Foo<?></error>::new);
        foo(<error descr="Cannot find class 1">1</error>::new);
        foo(<error descr="'ABar' is abstract; cannot be instantiated">ABar::new</error>);
        foo(<error descr="'ABaz' is abstract; cannot be instantiated">ABaz::new</error>);
    }
}