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

import 'package:expect/expect.dart';

// Tests that the compiler doesn't crash resolving annotations that refer
// to other annotated types.

class Annotation {
  final String value;
  const Annotation({this.value});
}

enum Enum {
  a,
  b,
}

class SubAnno extends Annotation {
  final Enum e;
  final Type type;
  const SubAnno({String value, this.e, this.type}) : super(value: value);
}

@SubAnno(value: 'super')
class A {}

@SubAnno(value: 'sub')
class B extends A {}

@SubAnno(type: B)
class C {}

main() {
  var c = new C();
  Expect.isTrue(c != null);
}
