library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

typedef hest_t = ({named: dynamic}) → dynamic;
class Bar extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::Bar
    : super core::Object::•()
    ;
  const constructor named(dynamic x) → self::Bar
    : super core::Object::•()
    ;
}
class Baz extends core::Object {
  constructor •(@#C1 dynamic constructorFormal) → self::Baz
    : super core::Object::•()
    ;
  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz
    return throw "";
  method fisk(@#C1 dynamic formal1, @#C2 dynamic formal2, @#C2 dynamic formal3, @#C1 @#C2 dynamic formal4, [@#C1 dynamic optional = #C3]) → dynamic {
    @#C1 dynamic local1;
    @#C2 dynamic local2;
    @#C2 dynamic local3;
    @#C1 @#C2 dynamic local4;
    @#C1 core::String localWithInitializer = "hello";
    @#C1 @#C2 dynamic localGroupPart1;
    @#C1 @#C2 dynamic localGroupPart2;
    function naebdyr(@#C1 dynamic nestedFormal) → Null
      return null;
    (dynamic) → Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
  }
  method hest({@#C1 dynamic named = #C3}) → dynamic
    return null;
}
static const field core::int foo = #C1;
static method main() → dynamic {}

constants  {
  #C1 = 42
  #C2 = self::Bar {}
  #C3 = null
}


Constructor coverage from constants:
org-dartlang-testcase:///annotation_variable_declaration.dart:
- Bar. (from org-dartlang-testcase:///annotation_variable_declaration.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Bar.named (from org-dartlang-testcase:///annotation_variable_declaration.dart:9:9)
