library;
//
// Problems in library:
//
// pkg/front_end/testcases/macros/duplicate_augment_lib.dart:9:14: Error: 'augmentedTopLevelMethod' is already declared in this scope.
// augment void augmentedTopLevelMethod() {
//              ^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/macros/duplicate_augment_lib.dart:5:14: Context: Previous declaration of 'augmentedTopLevelMethod'.
// augment void augmentedTopLevelMethod() {
//              ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/macros/duplicate_augment_lib.dart:22:15: Error: 'AugmentedClass' is already declared in this scope.
// augment class AugmentedClass {
//               ^^^^^^^^^^^^^^
// pkg/front_end/testcases/macros/duplicate_augment_lib.dart:13:15: Context: Previous declaration of 'AugmentedClass'.
// augment class AugmentedClass {
//               ^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

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

class AugmentedClass#1#1 extends core::Object { // from org-dartlang-testcase:///duplicate_augment_lib.dart
  synthetic constructor •() → self::AugmentedClass#1#1
    : super core::Object::•()
    ;
  method augmentedInstanceMethod() → void {
    core::print("augmentedInstanceMethod#2");
  }
  static method augmentedStaticMethod() → void {
    core::print("augmentedStaticMethod#2");
  }
}
class AugmentedClass extends core::Object {
  synthetic constructor •() → self::AugmentedClass
    : super core::Object::•()
    ;
  method /* from org-dartlang-testcase:///duplicate_augment_lib.dart */ augmentedInstanceMethod() → void {
    core::print("augmentedInstanceMethod#1");
  }
  static method /* from org-dartlang-testcase:///duplicate_augment_lib.dart */ augmentedStaticMethod() → void {
    core::print("augmentedStaticMethod#1");
  }
}
static method /* from org-dartlang-testcase:///duplicate_augment_lib.dart */ augmentedTopLevelMethod() → void {
  core::print("augmentedTopLevelMethod#1");
}
