// 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.

// Regression test for http://dartbug.com/37494

import 'dart:collection';
import 'dart:typed_data';

void main() {
  final u8 = Uint8List(10);
  // Uint8List.{sort,join} are ListMixin.{sort,join} which takes and explicit
  // receiver because Uint8List is an intercepted type.
  u8.sort();
  print(u8.join());

  final list = Example();
  list.addAll([1, 2, 3]);
  list.sort();
  print(list.join());
}

class Example<T> extends ListBase<T> {
  final _list = <T>[];

  @override
  operator [](int index) => _list[index];

  @override
  operator []=(int index, T value) {
    _list[index] = value;
  }

  @override
  int get length => _list.length;

  @override
  set length(int value) {
    _list.length = value;
  }

  @override
  String join([String separator = ""]) {
    return super.join(separator); // This super call had bad dummy interceptor.
  }

  @override
  @pragma('dart2js:noInline')
  void sort([int compare(T a, T b)?]) {
    super.sort(compare); // This super call had bad dummy interceptor.
  }
}
