// 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]!;
}
