// 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.

/*library: 
 compilationSequence=[
  package:_fe_analyzer_shared/src/macros/api.dart,
  macro_lib.dart,
  main.dart],
 macrosAreApplied,
 macrosAreAvailable
*/

import 'macro_lib.dart';

/*member: main:appliedMacros=[Macro1.new]*/
@Macro1()
void main() {}

/*class: Class1:
 appliedMacros=[Macro2.new],
 macrosAreApplied
*/
@Macro2()
class Class1 {
  /*member: Class1.method:appliedMacros=[
    Macro1.new,
    Macro2.new]*/
  @Macro1()
  @Macro2()
  void method() {}
}

@NonMacro()
class Class2 {}

/*class: Class3:macrosAreApplied*/
class Class3 {
  /*member: Class3.field:appliedMacros=[Macro1.new]*/
  @Macro1()
  var field;
}

class Class4 {
  @NonMacro()
  var field;
}
