library;
import self as self;

import "dart:test";

static method main() → dynamic {}

@#C3
library;
import self as self2;
import "dart:core" as core;
import "dart:_internal" as _in;

import "dart:_internal";

@#C5
@/* from org-dartlang-testcase:///patch_lib.dart */ #C6
@/* from org-dartlang-testcase:///patch_lib.dart */ #C8
class Class<@#C10 @/* from org-dartlang-testcase:///patch_lib.dart */ #C12 T extends core::Object? = dynamic> extends core::Object {
  @/* from org-dartlang-testcase:///origin_lib.dart */ #C14
  @#C6
  @#C16
  external constructor /* from org-dartlang-testcase:///patch_lib.dart */ •() → self2::Class<self2::Class::T%>;
  @/* from org-dartlang-testcase:///origin_lib.dart */ #C18
  @#C6
  @#C20
  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C22 S extends core::Object? = dynamic>() → void;
}
@#C24
@/* from org-dartlang-testcase:///patch_lib.dart */ #C6
@/* from org-dartlang-testcase:///patch_lib.dart */ #C26
extension Extension<@#C28 @/* from org-dartlang-testcase:///patch_lib.dart */ #C30 T extends core::Object? = dynamic> on core::int {
  method method = self2::Extension|method;
  method tearoff method = self2::Extension|get#method;
}
@/* from org-dartlang-testcase:///origin_lib.dart */ #C32
@#C6
@#C34
external static extension-member method /* from org-dartlang-testcase:///patch_lib.dart */ Extension|method<T extends core::Object? = dynamic, @#C36 S extends core::Object? = dynamic>(lowered final core::int #this) → void;
static extension-member method /* from org-dartlang-testcase:///patch_lib.dart */ Extension|get#method<T extends core::Object? = dynamic>(lowered final core::int #this) → <S extends core::Object? = dynamic>() → void
  return <S extends core::Object? = dynamic>() → void => self2::Extension|method<self2::Extension|get#method::T%, S%>(#this);

constants  {
  #C1 = "origin-library"
  #C2 = null
  #C3 = core::pragma {name:#C1, options:#C2}
  #C4 = "origin-class"
  #C5 = core::pragma {name:#C4, options:#C2}
  #C6 = _in::_Patch {}
  #C7 = "patch-class"
  #C8 = core::pragma {name:#C7, options:#C2}
  #C9 = "origin-class-type-variable"
  #C10 = core::pragma {name:#C9, options:#C2}
  #C11 = "patch-class-type-variable"
  #C12 = core::pragma {name:#C11, options:#C2}
  #C13 = "origin-constructor"
  #C14 = core::pragma {name:#C13, options:#C2}
  #C15 = "patch-constructor"
  #C16 = core::pragma {name:#C15, options:#C2}
  #C17 = "origin-procedure"
  #C18 = core::pragma {name:#C17, options:#C2}
  #C19 = "patch-procedure"
  #C20 = core::pragma {name:#C19, options:#C2}
  #C21 = "patch-method-type-variable"
  #C22 = core::pragma {name:#C21, options:#C2}
  #C23 = "origin-extension"
  #C24 = core::pragma {name:#C23, options:#C2}
  #C25 = "patch-extension"
  #C26 = core::pragma {name:#C25, options:#C2}
  #C27 = "origin-extension-type-variable"
  #C28 = core::pragma {name:#C27, options:#C2}
  #C29 = "patch-extension-type-variable"
  #C30 = core::pragma {name:#C29, options:#C2}
  #C31 = "origin-extension-method"
  #C32 = core::pragma {name:#C31, options:#C2}
  #C33 = "patch-extension-method"
  #C34 = core::pragma {name:#C33, options:#C2}
  #C35 = "patch-extension-method-type-variable"
  #C36 = core::pragma {name:#C35, options:#C2}
}


Constructor coverage from constants:
org-dartlang-testcase:///origin_lib.dart:
- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
