// 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=[
  _extension#0,
  _extension#1,
  _extension#2,
  _extension#3,
  _extension#4]*/

class A1 {}

/*class: _extension#0:
 builder-name=_extension#0,
 builder-onType=A1,
 extension-members=[
  method=_extension#0|method,
  tearoff method=_extension#0|get#method],
 extension-name=_extension#0,
 extension-onType=A1!
*/
extension on A1 {
  /*member: _extension#0|method:
     builder-name=method,
     builder-params=[#this],
     member-name=_extension#0|method,
     member-params=[#this]
  */
  method() {}

  /*member: _extension#0|get#method:
   builder-name=method,
   builder-params=[#this],
   member-name=_extension#0|get#method,
   member-params=[#this]
  */
}

/*class: _extension#1:
 builder-name=_extension#1,
 builder-onType=A1,
 extension-members=[
  method=_extension#1|method,
  tearoff method=_extension#1|get#method],
 extension-name=_extension#1,
 extension-onType=A1!
*/
extension on A1 {
  /*member: _extension#1|method:
     builder-name=method,
     builder-params=[#this],
     member-name=_extension#1|method,
     member-params=[#this]
  */
  method() {}

  /*member: _extension#1|get#method:
   builder-name=method,
   builder-params=[#this],
   member-name=_extension#1|get#method,
   member-params=[#this]
  */
}

class B1<T> {}

/*class: _extension#2:
 builder-name=_extension#2,
 builder-onType=B1<T>,
 builder-type-params=[T],
 extension-members=[
  method=_extension#2|method,
  tearoff method=_extension#2|get#method],
 extension-name=_extension#2,
 extension-onType=B1<T%>!,
 extension-type-params=[T]
*/
extension <T> on B1<T> {
  /*member: _extension#2|method:
     builder-name=method,
     builder-params=[#this],
     builder-type-params=[T],
     member-name=_extension#2|method,
     member-params=[#this],
     member-type-params=[T]
  */
  method() {}

  /*member: _extension#2|get#method:
   builder-name=method,
   builder-params=[#this],
   builder-type-params=[T],
   member-name=_extension#2|get#method,
   member-params=[#this],
   member-type-params=[T]
  */
}

/*class: _extension#3:
 builder-name=_extension#3,
 builder-onType=B1<A1>,
 extension-members=[
  method=_extension#3|method,
  tearoff method=_extension#3|get#method],
 extension-name=_extension#3,
 extension-onType=B1<A1!>!
*/
extension on B1<A1> {
  /*member: _extension#3|method:
     builder-name=method,
     builder-params=[#this],
     member-name=_extension#3|method,
     member-params=[#this]
  */
  method() {}

  /*member: _extension#3|get#method:
   builder-name=method,
   builder-params=[#this],
   member-name=_extension#3|get#method,
   member-params=[#this]
  */
}

/*class: _extension#4:
 builder-name=_extension#4,
 builder-onType=B1<T>,
 builder-type-params=[T extends A1],
 extension-members=[
  method=_extension#4|method,
  tearoff method=_extension#4|get#method],
 extension-name=_extension#4,
 extension-onType=B1<T!>!,
 extension-type-params=[T extends A1!]
*/
extension <T extends A1> on B1<T> {
  /*member: _extension#4|method:
   builder-name=method,
   builder-params=[#this],
   builder-type-params=[T extends A1],
   member-name=_extension#4|method,
   member-params=[#this],
   member-type-params=[T extends A1!]
  */
  method() {}

  /*member: _extension#4|get#method:
   builder-name=method,
   builder-params=[#this],
   builder-type-params=[T extends A1],
   member-name=_extension#4|get#method,
   member-params=[#this],
   member-type-params=[T extends A1!]
  */
}

main() {}
