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

// @dart=2.9

class Class {
  int field;
}

extension Extension on Class {
  int get property => field;
  void set property(int value) {
    field = value;
  }
  int method() => field;
}

main() {
  Class c;
  c?.property ?? 0;
  Extension(c)?.property ?? 0;
  c?.property = 42 ?? 0;
  Extension(c)?.property = 42 ?? 0;
  (c?.property = 42) ?? 0;
  (Extension(c)?.property = 42) ?? 0;
  c?.method() ?? 0;
  Extension(c)?.method() ?? 0;
  c = new Class();
  c.property ?? 0;
  Extension(c).property ?? 0;
}
