library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/conflicts.dart:14:11: Error: 'DuplicateExtensionName' is already declared in this scope.
// extension DuplicateExtensionName on Class2 {
//           ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/extensions/conflicts.dart:9:11: Context: Previous declaration of 'DuplicateExtensionName'.
// extension DuplicateExtensionName on Class1 {
//           ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/extensions/conflicts.dart:21:3: Error: 'duplicateMethodName1' is already declared in this scope.
//   duplicateMethodName1() => 2;
//   ^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/extensions/conflicts.dart:20:3: Context: Previous declaration of 'duplicateMethodName1'.
//   duplicateMethodName1() => 1;
//   ^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the type 'Class2'.
//  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
//   c2.uniqueMethod2();
//      ^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Class1 extends core::Object {
  synthetic constructor •() → self::Class1
    : super core::Object::•()
    ;
}
class Class2 extends core::Object {
  synthetic constructor •() → self::Class2
    : super core::Object::•()
    ;
}
extension DuplicateExtensionName on self::Class1 {
  method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
  method tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
  method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
  method tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
}
extension UniqueExtensionName on self::Class1 {
  method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
  method tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
}
static extension-member method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1 #this) → dynamic {}
static extension-member method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1 #this) → () → dynamic
  return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
static extension-member method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1 #this) → dynamic
  return 1;
static extension-member method DuplicateExtensionName|get#duplicateMethodName2(lowered final self::Class1 #this) → () → dynamic
  return () → dynamic => self::DuplicateExtensionName|duplicateMethodName2(#this);
static extension-member method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1 #this) → dynamic
  return 1;
static extension-member method UniqueExtensionName|get#duplicateMethodName1(lowered final self::Class1 #this) → () → dynamic
  return () → dynamic => self::UniqueExtensionName|duplicateMethodName1(#this);
static method main() → dynamic {
  self::Class1 c1 = new self::Class1::•();
  self::DuplicateExtensionName|uniqueMethod1(c1);
}
static method errors() → dynamic {
  self::Class2 c2 = new self::Class2::•();
  invalid-expression "pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the type 'Class2'.
 - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
  c2.uniqueMethod2();
     ^^^^^^^^^^^^^" in c2{<unresolved>}.uniqueMethod2();
}
