// Copyright (c) 2012, 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.

// Test ensuring that compiler can parse metadata. Need to add negative
// test cases with illegal metadata annotations.

#library("metadata_test.dart");
#import("metadata_lib.dart", prefix: "Meta");

class Tag {
  final String annotation;
  const Tag(this.annotation);
}

const meta1 = 1;
const meta2 = const Tag("meta2");

const extern = const Tag("external");

@meta1 var topLevelVar;
@Meta.Alien.unspecified() List unknownUnknowns;

@meta1 typedef int DingDong<@meta2 T>(@meta1 event);

@meta1 class A <@Tag("typeParam") T> {
  @meta1 @meta2
  static String staticField;

  @Meta.Alien("ET") int foo(@meta1 bool fool, {@meta1 @Tag("opt") x: 100}) {
    return x;
  }

  @Tag(r"timewarp")
  List<int> getNextWeeksLottoNumbers() => [1, 2, 3, 4, 5, 6];
}

@meta1 main() {
  @meta1 var a = new A();
  Expect.equals(0, a.foo(false, x: 0));

  for (@Tag("loopvar") int i = 0; i < 10; i++) {
    // Do something.
  }

  @meta1 var s = r'This is a raw \\ string.';
}
