// Copyright (c) 2020, 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.

nonConstant() => int.parse('1') == 1;

class A {
  final literal1 = <int>[];
  final literal2 = [1, 2, 3];
  final constLiteral1 = const <int>[];
  final constLiteral2 = const [1, 2];
  final defaultConstructor1 = List<int>();
  final defaultConstructor2 = List<int>(3);
  final filledFactory1 = List<int>.filled(2, 0);
  final filledFactory2 = List<int>.filled(2, 0, growable: true);
  final filledFactory3 = List<int>.filled(2, 0, growable: false);
  final filledFactory4 = List<int>.filled(2, 0, growable: nonConstant());
  final filledFactory5 = List<int>.filled(2, null);
  final filledFactory6 = List<int>.filled(2, null, growable: true);
  final filledFactory7 = List<int>.filled(2, null, growable: false);
  final filledFactory8 = List<int>.filled(2, null, growable: nonConstant());
  final generateFactory1 = List<int>.generate(2, (i) => i);
  final generateFactory2 = List<int>.generate(2, (i) => i, growable: true);
  final generateFactory3 = List<int>.generate(2, (i) => i, growable: false);
  final generateFactory4 =
      List<int>.generate(2, (i) => i, growable: nonConstant());
  final generateFactory5 = List<List<int>>.generate(2, (_) => <int>[]);
}

main() {
  A x = A();
  // Make sure fields are not tree-shaken.
  print(x.literal1);
  print(x.literal2);
  print(x.constLiteral1);
  print(x.constLiteral2);
  print(x.defaultConstructor1);
  print(x.defaultConstructor2);
  print(x.filledFactory1);
  print(x.filledFactory2);
  print(x.filledFactory3);
  print(x.filledFactory4);
  print(x.filledFactory5);
  print(x.filledFactory6);
  print(x.filledFactory7);
  print(x.filledFactory8);
  print(x.generateFactory1);
  print(x.generateFactory2);
  print(x.generateFactory3);
  print(x.generateFactory4);
  print(x.generateFactory5);
}
