// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*library: scope=[A2]*/

class A1 {
  Object? field;
  void method1() {}
}

/*class: A2:
 builder-name=A2,
 builder-onType=A1,
 extension-members=[
  method2=A2|method2,
  method3=A2|method3,
  method4=A2|method4,
  tearoff method2=A2|get#method2,
  tearoff method3=A2|get#method3,
  tearoff method4=A2|get#method4],
 extension-name=A2,
 extension-onType=A1!
*/
extension A2 on A1 {
  /*member: A2|method2:
   builder-name=method2,
   builder-params=[#this],
   member-name=A2|method2,
   member-params=[#this]
  */
  void method2() => method1();

  /*member: A2|get#method2:
   builder-name=method2,
   builder-params=[#this],
   member-name=A2|get#method2,member-params=[#this]
  */

  /*member: A2|method3:
   builder-name=method3,
   builder-params=[#this],
   member-name=A2|method3,
   member-params=[#this]
  */
  Object? method3() => field;

  /*member: A2|get#method3:
   builder-name=method3,
   builder-params=[#this],
   member-name=A2|get#method3,
   member-params=[#this]
  */

  /*member: A2|method4:
   builder-name=method4,
   builder-params=[#this,o],
   member-name=A2|method4,
   member-params=[#this,o]
  */
  void method4(Object? o) {
    field = o;
  }

  /*member: A2|get#method4:
   builder-name=method4,
   builder-params=[#this,o],
   member-name=A2|get#method4,
   member-params=[#this]
  */
}

main() {
}
