library /*isNonNullableByDefault*/;
import self as self;
import "package:macro/macro.dart" as mac;
import "dart:core" as core;

import "package:macro/macro.dart";

@#C1
@#C2
class Class1 extends core::Object {
  @#C3
  field core::int? instanceField1 = null;
  @#C3
  final field core::int? instanceField2 = null;
  @#C3
  late final field core::int? instanceField3 = null;
  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
  @#C5
  constructor •() → self::Class1
    : super core::Object::•()
    ;
  @#C5
  static factory redirect() → self::Class1
    return new self::Class1::•();
  @#C5
  static factory fact() → self::Class1
    return new self::Class1::•();
  @#C6
  method instanceMethod1() → void {}
  @#C6
  get instanceGetter1() → core::int?
    return null;
  @#C6
  set instanceSetter1(core::int? value) → void {}
  @#C6
  operator [](core::int i) → core::int
    return i;
}
@#C1
@#C2
abstract class Class2 extends core::Object {
  synthetic constructor •() → self::Class2
    : super core::Object::•()
    ;
  @#C6
  abstract method instanceMethod1() → void;
  @#C3
  abstract get instanceField1() → core::int?;
  @#C3
  abstract set instanceField1(core::int? #externalFieldValue) → void;
}
@#C7
static field core::int? topLevelField1;
@#C7
static final field core::int? topLevelField3 = null;
@#C7
late static field core::int? topLevelField4;
@#C8
static method topLevelFunction1() → void {}
@#C8
external static method topLevelFunction2() → void;
@#C7
external static get topLevelField2() → core::int?;
@#C7
external static set topLevelField2(core::int? #externalFieldValue) → void;
@#C8
static get topLevelGetter1() → core::int?
  return null;
@#C8
static set topLevelSetter1(core::int? value) → void {}

constants  {
  #C1 = mac::ClassDeclarationsMacro1 {}
  #C2 = mac::ClassDeclarationsMacro2 {}
  #C3 = mac::FieldDeclarationsMacro1 {}
  #C4 = constructor-tearoff self::Class1::redirect
  #C5 = mac::ConstructorDeclarationsMacro1 {}
  #C6 = mac::MethodDeclarationsMacro1 {}
  #C7 = mac::VariableDeclarationsMacro1 {}
  #C8 = mac::FunctionDeclarationsMacro1 {}
}
