// 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.
// @dart=2.9
class A<T> {
  var field1 = 0;
  var field2 = 0;
  var field3 = 0;
  var field4 = 0;
  int field5;
  int field6;
  int field7;
  int field8;
  var field9;
  T field10;
  T field11;
  T field12;
  T field13;
  T field14;
  var field15 = 0;
  int field16;
  var field17 = 0;
  int field18;
}

class B<T, S> {
  var field1 = 1;
  var field2 = '';
  var field3 = 1;
  var field4 = '';
  int field5;
  String field6;
  int field7;
  String field8;
  var field9;
  T field10;
  S field11;
  T field12;
  T field13;
  S field14;
  int field15;
  var field16 = 0;
  String field17;
  var field18 = '';
}

class C implements A<int>, B<int, String> {
  var field1;
  var field2; // error
  var field3 = 0;
  var field4 = 0; // error
  var field5;
  var field6; // error
  var field7 = 0;
  var field8 = 0; // error
  var field9;
  var field10;
  var field11; // error
  int field12;
  var field13 = 0;
  int field14; // error
  var field15;
  var field16;
  var field17; // error
  var field18; // error

  C(
      this.field1,
      this.field2,
      this.field3,
      this.field4,
      this.field5,
      this.field6,
      this.field7,
      this.field8,
      this.field9,
      this.field10,
      this.field11,
      this.field12,
      this.field13,
      this.field14,
      this.field15,
      this.field16,
      this.field17,
      this.field18);
}

class D<T> implements A<T>, B<T, T> {
  var field1;
  var field2; // error
  var field3 = 0;
  var field4 = 0; // error
  var field5;
  var field6; // error
  var field7 = 0;
  var field8 = 0; // error
  var field9;
  var field10;
  var field11;
  T field12;
  var field13 = null;
  T field14;
  var field15;
  var field16;
  var field17; // error
  var field18; // error

  D(
      this.field1,
      this.field2,
      this.field3,
      this.field4,
      this.field5,
      this.field6,
      this.field7,
      this.field8,
      this.field9,
      this.field10,
      this.field11,
      this.field12,
      this.field13,
      this.field14,
      this.field15,
      this.field16,
      this.field17,
      this.field18);
}
