|  | // Copyright (c) 2022, 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 field promotion is prevented if there is another instance getter | 
|  | // of the same name in the library that's a non-final field or a concrete | 
|  | // getter. | 
|  |  | 
|  | import 'package:expect/static_type_helper.dart'; | 
|  |  | 
|  | part 'field_promotion_name_conflicts_part.dart'; | 
|  |  | 
|  | class C { | 
|  | final int? _f1; | 
|  | final int? _f2; | 
|  | final int? _f3; | 
|  | final int? _f4; | 
|  | final int? _f5; | 
|  | final int? _f6; | 
|  | final int? _f7; | 
|  | final int? _f8; | 
|  | final int? _f9; | 
|  | final int? _f10; | 
|  | final int? _f11; | 
|  | final int? _f12; | 
|  | final int? _f13; | 
|  | final int? _f14; | 
|  |  | 
|  | C(int? i) | 
|  | : _f1 = i, | 
|  | _f2 = i, | 
|  | _f3 = i, | 
|  | _f4 = i, | 
|  | _f5 = i, | 
|  | _f6 = i, | 
|  | _f7 = i, | 
|  | _f8 = i, | 
|  | _f9 = i, | 
|  | _f10 = i, | 
|  | _f11 = i, | 
|  | _f12 = i, | 
|  | _f13 = i, | 
|  | _f14 = i; | 
|  | } | 
|  |  | 
|  | abstract class D { | 
|  | final int? _f1; | 
|  | int? _f2; | 
|  | int? get _f3; | 
|  | int? get _f4 => 0; | 
|  | set _f5(int? i) {} | 
|  | static int? _f6; | 
|  | static int? get _f7 => 0; | 
|  |  | 
|  | D(int? i) : _f1 = i; | 
|  | } | 
|  |  | 
|  | int? _f8; | 
|  | int? get _f9 => 0; | 
|  |  | 
|  | extension on String { | 
|  | int? get _f10 => 0; | 
|  | } | 
|  |  | 
|  | mixin M { | 
|  | int? _f12; | 
|  | int? get _f13 => 0; | 
|  | } | 
|  |  | 
|  | enum E { | 
|  | e1, | 
|  | e2; | 
|  |  | 
|  | int? get _f14 => 0; | 
|  | } | 
|  |  | 
|  | void testFinalField(C c) { | 
|  | if (c._f1 != null) { | 
|  | c._f1.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testNonFinalField(C c) { | 
|  | if (c._f2 != null) { | 
|  | c._f2.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testAbstractGetter(C c) { | 
|  | if (c._f3 != null) { | 
|  | c._f3.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testConcreteGetter(C c) { | 
|  | if (c._f4 != null) { | 
|  | c._f4.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testSetter(C c) { | 
|  | if (c._f5 != null) { | 
|  | c._f5.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testStaticField(C c) { | 
|  | if (c._f6 != null) { | 
|  | c._f6.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testStaticGetter(C c) { | 
|  | if (c._f7 != null) { | 
|  | c._f7.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testTopLevelField(C c) { | 
|  | if (c._f8 != null) { | 
|  | c._f8.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testTopLevelGetter(C c) { | 
|  | if (c._f9 != null) { | 
|  | c._f9.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testExtensionGetter(C c) { | 
|  | if (c._f10 != null) { | 
|  | c._f10.expectStaticType<Exactly<int>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testGetterInPart(C c) { | 
|  | if (c._f11 != null) { | 
|  | c._f11.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testFieldInMixin(C c) { | 
|  | if (c._f12 != null) { | 
|  | c._f12.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testGetterInMixin(C c) { | 
|  | if (c._f13 != null) { | 
|  | c._f13.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void testGetterInEnum(C c) { | 
|  | if (c._f14 != null) { | 
|  | c._f14.expectStaticType<Exactly<int?>>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | main() { | 
|  | for (var c in [C(null), C(0)]) { | 
|  | testFinalField(c); | 
|  | testNonFinalField(c); | 
|  | testAbstractGetter(c); | 
|  | testConcreteGetter(c); | 
|  | testSetter(c); | 
|  | testStaticField(c); | 
|  | testStaticGetter(c); | 
|  | testTopLevelField(c); | 
|  | testTopLevelGetter(c); | 
|  | testExtensionGetter(c); | 
|  | testGetterInPart(c); | 
|  | testFieldInMixin(c); | 
|  | testGetterInMixin(c); | 
|  | testGetterInEnum(c); | 
|  | } | 
|  | } |