library;
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///scope_access.dart";
import "org-dartlang-testcase:///scope_access.dart";
import "org-dartlang-testcase:///scope_access.dart";

class Class extends core::Object {
  constructor /* from org-dartlang-testcase:///scope_access_lib1.dart */ injectedConstructor1() → self::Class
    : super core::Object::•() {
    new self::Class::constructor();
    new self::Class::injectedConstructor1();
    new self::Class::injectedConstructor2();
    new self::Class::_injectedConstructor3();
  }
  constructor /* from org-dartlang-testcase:///scope_access_lib2.dart */ injectedConstructor2() → self::Class
    : super core::Object::•() {
    new self::Class::constructor();
    new self::Class::injectedConstructor1();
    new self::Class::injectedConstructor2();
    new self::Class::_injectedConstructor3();
  }
  constructor /* from org-dartlang-testcase:///scope_access_lib3.dart */ _injectedConstructor3() → self::Class
    : super core::Object::•() {
    new self::Class::constructor();
    new self::Class::injectedConstructor1();
    new self::Class::injectedConstructor2();
    new self::Class::_injectedConstructor3();
  }
  constructor constructor() → self::Class
    : super core::Object::•() {
    new self::Class::constructor();
    new self::Class::injectedConstructor1();
    new self::Class::injectedConstructor2();
    new self::Class::_injectedConstructor3();
  }
  static method staticMethod() → void {
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
  }
  static set staticSetter(dynamic value) → void {
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
  }
  static method /* from org-dartlang-testcase:///scope_access_lib1.dart */ staticInjectedMethod1() → void {
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
  }
  static set /* from org-dartlang-testcase:///scope_access_lib1.dart */ staticInjectedSetter1(dynamic value) → void {
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
  }
  static method /* from org-dartlang-testcase:///scope_access_lib2.dart */ staticInjectedMethod2() → void {
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
  }
  static set /* from org-dartlang-testcase:///scope_access_lib2.dart */ staticInjectedSetter2(dynamic value) → void {
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
  }
  static method /* from org-dartlang-testcase:///scope_access_lib3.dart */ _staticInjectedMethod3() → void {
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
    self::Class::staticMethod();
    self::Class::staticInjectedMethod1();
    self::Class::staticInjectedMethod2();
    self::Class::_staticInjectedMethod3();
  }
  static set /* from org-dartlang-testcase:///scope_access_lib3.dart */ _staticInjectedSetter3(dynamic value) → void {
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
    self::Class::staticSetter = value;
    self::Class::staticInjectedSetter1 = value;
    self::Class::staticInjectedSetter2 = value;
    self::Class::_staticInjectedSetter3 = value;
  }
}
static method topLevelMethod() → void {
  self::topLevelMethod();
  self::topLevelInjectedMethod1();
  self::topLevelInjectedMethod2();
  self::_topLevelInjectedMethod3();
}
static set topLevelSetter(dynamic value) → void {
  self::topLevelSetter = value;
  self::topLevelInjectedSetter1 = value;
  self::topLevelInjectedSetter2 = value;
  self::_topLevelInjectedSetter3 = value;
}
static method /* from org-dartlang-testcase:///scope_access_lib1.dart */ topLevelInjectedMethod1() → void {
  self::topLevelMethod();
  self::topLevelInjectedMethod1();
  self::topLevelInjectedMethod2();
  self::_topLevelInjectedMethod3();
}
static set /* from org-dartlang-testcase:///scope_access_lib1.dart */ topLevelInjectedSetter1(dynamic value) → void {
  self::topLevelSetter = value;
  self::topLevelInjectedSetter1 = value;
  self::topLevelInjectedSetter2 = value;
  self::_topLevelInjectedSetter3 = value;
}
static method /* from org-dartlang-testcase:///scope_access_lib2.dart */ topLevelInjectedMethod2() → void {
  self::topLevelMethod();
  self::topLevelInjectedMethod1();
  self::topLevelInjectedMethod2();
  self::_topLevelInjectedMethod3();
}
static set /* from org-dartlang-testcase:///scope_access_lib2.dart */ topLevelInjectedSetter2(dynamic value) → void {
  self::topLevelSetter = value;
  self::topLevelInjectedSetter1 = value;
  self::topLevelInjectedSetter2 = value;
  self::_topLevelInjectedSetter3 = value;
}
static method /* from org-dartlang-testcase:///scope_access_lib3.dart */ _topLevelInjectedMethod3() → void {
  self::topLevelMethod();
  self::topLevelInjectedMethod1();
  self::topLevelInjectedMethod2();
  self::_topLevelInjectedMethod3();
}
static set /* from org-dartlang-testcase:///scope_access_lib3.dart */ _topLevelInjectedSetter3(dynamic value) → void {
  self::topLevelSetter = value;
  self::topLevelInjectedSetter1 = value;
  self::topLevelInjectedSetter2 = value;
  self::_topLevelInjectedSetter3 = value;
}
