/*
 * Copyright (c) 2020, 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.
 */
// ignore: deprecated_member_use_from_same_package
/**
 * @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
 * @author sgekhov@unipro.ru
 */
import "places_lib.dart";

class A {
    const A();
}

void foo() {}

// class
@A()
class C1 {}

// typedef
@A()
typedef void Foo();

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

// constructor
class C3 {
  @A() C3() {}
}

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

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

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

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

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