library test;

class Foo {
  const Foo(List<String> l);
}

abstract class Bar {
  @Foo(const [])
  Bar();
  @Foo(const [])
  var x;
  @Foo(const [])
  void f();
}

main() {}
