// Copyright (c) 2023, 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. // Tests that the representation variable may undergo field promotion, assuming // that it's private. // // These tests specifically exercise extension types whose representation type // is nullable, since those are handled differently by the front end than // extension types whose representation type is non-nullable. import '../static_type_helper.dart'; extension type E(Object Function()? _f) { testImplicitThisAccess() { if (_f != null) { _f.expectStaticType>(); _f().expectStaticType>(); } } testExplicitThisAccess() { if (this._f != null) { this._f.expectStaticType>(); this._f().expectStaticType>(); } } } testGeneralPropertyAccess(E e) { if ((e)._f != null) { (e)._f.expectStaticType>(); (e)._f().expectStaticType>(); } } testPrefixedIdentifierAccess(E e) { // Note: the analyzer has a special representation for property accesses of // the form `IDENTIFIER.IDENTIFIER`, so we test this form separately. if (e._f != null) { e._f.expectStaticType>(); e._f().expectStaticType>(); } } main() { int Function() f = () => 0; E(f).testImplicitThisAccess(); E(f).testExplicitThisAccess(); testGeneralPropertyAccess(E(f)); testPrefixedIdentifierAccess(E(f)); }