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

class Class1 {
  Class2? get field => null;
  int operator [](int index) => index;
  void operator []=(int index, int value) {}
}

class Class2 {
  int field = 42;
}

extension Extension on Class2 {
  int operator [](int index) => field;
  void operator []=(int index, int value) {
    field = value;
  }
}

main() {
  Class1? c1;
  c1?[0];
  c1?[0] = 1;
  c1?[0] = 1 + c1[0];
  c1?[0] += 1;
  c1?[0] += 1 + c1[0];
  // TODO(johnniwinther): ++ should probably not be null-shorted, awaiting spec
  //  update.
  ++c1?[0];
  c1?[0]++;
  c1?[0] ??= 1;
  c1?[0] ??= 1 + c1[1];

  Class2? c2;
  c2?[0];
  c2?[0] = 1;
  c2?[0] = 1 + c2[0];
  c2?[0] += 1;
  c2?[0] += 1 + c2[0];
  // TODO(johnniwinther): ++ should probably not be null-shorted, awaiting spec
  //  update.
  ++c2?[0];
  c2?[0]++;
  c2?[0] ??= 1;
  c2?[0] ??= 1 + c2[1];

  Extension(c2)?[0];
  Extension(c2)?[0] = 1;
  Extension(c2)?[0] = 1 + Extension(c2)[0];
  Extension(c2)?[0] += 1;
  Extension(c2)?[0] += 1 + Extension(c2)[0];
  // TODO(johnniwinther): ++ should probably not be null-shorted, awaiting spec
  //  update.
  ++Extension(c2)?[0];
  Extension(c2)?[0]++;
  Extension(c2)?[0] ??= 1;
  Extension(c2)?[0] ??= 1 + Extension(c2)[1];

  c1?.field?[0];
  c1?.field?[0] = 1;
  c1?.field?[0] = 1 + c1[0];
  c1?.field?[0] += 1;
  c1?.field?[0] += 1 + c1[0];
  // TODO(johnniwinther): ++ should probably not be null-shorted, awaiting spec
  //  update.
  ++c1?.field?[0];
  c1?.field?[0]++;
  c1?.field?[0] ??= 1;
  c1?.field?[0] ??= 1 + c1[1];

  Extension(c1?.field)?[0];
  Extension(c1?.field)?[0] = 1;
  Extension(c1?.field)?[0] = 1 + Extension(c2)?[0]!;
  Extension(c1?.field)?[0] += 1;
  Extension(c1?.field)?[0] += 1 + Extension(c2)?[0]!;
  // TODO(johnniwinther): ++ should probably not be null-shorted, awaiting spec
  //  update.
  ++Extension(c1?.field)?[0];
  Extension(c1?.field)?[0]++;
  Extension(c1?.field)?[0] ??= 1;
  Extension(c1?.field)?[0] ??= 1 + Extension(c2)?[1]!;
}
