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