/*
 * Copyright (c) 2021, 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.
 */
/**
 * @assertion
 *  Metadata can appear before a library, part header, class, typedef, type
 *  parameter, constructor, factory, function, parameter, or variable
 *  declaration, and before an import, export, or part directive.
 *
 * @description Check that metadata can appear before a library, class, typedef,
 * type parameter, constructor, factory, function, parameter, or variable
 * declaration. Test generic metadata
 * @author sgekhov@unipro.ru
 */
// SharedOptions=--enable-experiment=generic-metadata

class A<T> {
    const A(T t);
}

void foo() {}

// class
@A<int>(42)
class C1 {}

// typedef
@A<int>(42)
typedef void Foo();

// type parameter
class C2<@A<int>(42) T> {}
void bar<@A<int>(42) T>() {}

// constructor
class C3 {
  @A<int>(42) C3() {}
}

// factory
class C4 {
  @A<int>(42) factory C4() => new C4();
}

// function
@A<int>(42) int test1() => 42;

// parameter
int test2(@A<int>(42) int x) => x;

// variable declaration
@A<int>(42) int x = 42;

main() {
  new C1();
  Foo f = foo;
  bar<int>();
  new C3();
  test1();
  test2(42);
}
