blob: e5a0c7a2b202b4d52afb12d4f252084469f86c49 [file] [log] [blame] [edit]
// 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 basic field promotion functionality when the feature is enabled.
import 'package:expect/static_type_helper.dart';
abstract class C {
final int? _privateFinalField;
final int? publicFinalField;
int? _privateField;
int? publicField;
int? get _privateAbstractGetter;
int? get publicAbstractGetter;
int? get _privateConcreteGetter => 0;
int? get publicConcreteGetter => 0;
C(int? i)
: _privateFinalField = i,
publicFinalField = i;
testPrivateFinalFieldThisAccess() {
if (_privateFinalField != null) {
_privateFinalField.expectStaticType<Exactly<int>>();
}
}
}
abstract class D extends C {
D(super.i);
testPrivateFinalFieldSuperAccess() {
if (super._privateFinalField != null) {
super._privateFinalField.expectStaticType<Exactly<int>>();
}
}
}
enum E {
e1(null),
e2(0);
final int? _privateFinalFieldInEnum;
const E(this._privateFinalFieldInEnum);
}
void testPrivateFinalField(C c) {
if (c._privateFinalField != null) {
c._privateFinalField.expectStaticType<Exactly<int>>();
}
}
void testPublicFinalField(C c) {
if (c.publicFinalField != null) {
c.publicFinalField.expectStaticType<Exactly<int?>>();
}
}
void testPrivateField(C c) {
if (c._privateField != null) {
c._privateField.expectStaticType<Exactly<int?>>();
}
}
void testPublicField(C c) {
if (c.publicField != null) {
c.publicField.expectStaticType<Exactly<int?>>();
}
}
void testPrivateAbstractGetter(C c) {
if (c._privateAbstractGetter != null) {
c._privateAbstractGetter.expectStaticType<Exactly<int>>();
}
}
void testPublicAbstractGetter(C c) {
if (c.publicAbstractGetter != null) {
c.publicAbstractGetter.expectStaticType<Exactly<int?>>();
}
}
void testPrivateConcreteGetter(C c) {
if (c._privateConcreteGetter != null) {
c._privateConcreteGetter.expectStaticType<Exactly<int?>>();
}
}
void testPublicConcreteGetter(C c) {
if (c.publicConcreteGetter != null) {
c.publicConcreteGetter.expectStaticType<Exactly<int?>>();
}
}
void testPrivateFinalFieldInEnum(E e) {
if (e._privateFinalFieldInEnum != null) {
e._privateFinalFieldInEnum.expectStaticType<Exactly<int>>();
}
}
void testPrivateFinalFieldGeneralPropertyAccess(C c) {
// The analyzer uses a special data structure for `IDENTIFIER.IDENTIFIER`, so
// we need to test the general case of property accesses as well.
if ((c)._privateFinalField != null) {
(c)._privateFinalField.expectStaticType<Exactly<int>>();
}
}
main() {}