class A {
  A.foo() {}
  A() {}
  factory A.bar() => new A();
}
testFoo() => A.foo;
testNew() => A.new;
testBar() => A.bar;
testFooExtraArgs() => A<int>.foo;
testNewExtraArgs() => A<int>.new;
testBarExtraArgs() => A<int>.bar;
main() {}
