// 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);
}
