blob: a9736dedc0ebb11dd427788f032b3cb46f54d64a [file] [log] [blame]
// 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.
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;
}
void acceptsInt(int x) {}
void testPrivateFinalField(C c) {
if (c._privateFinalField != null) {
var x = c._privateFinalField;
// `x` has type `int` so this is ok
acceptsInt(x);
}
}
void testPublicFinalField(C c) {
if (c.publicFinalField != null) {
var x = c.publicFinalField;
// `x` has type `int?` so this is ok
x = null;
}
}
void testPrivateField(C c) {
if (c._privateField != null) {
var x = c._privateField;
// `x` has type `int?` so this is ok
x = null;
}
}
void testPublicField(C c) {
if (c.publicField != null) {
var x = c.publicField;
// `x` has type `int?` so this is ok
x = null;
}
}
void testPrivateAbstractGetter(C c) {
if (c._privateAbstractGetter != null) {
var x = c._privateAbstractGetter;
// `x` has type `int` so this is ok
acceptsInt(x);
}
}
void testPublicAbstractGetter(C c) {
if (c.publicAbstractGetter != null) {
var x = c.publicAbstractGetter;
// `x` has type `int?` so this is ok
x = null;
}
}
void testPrivateConcreteGetter(C c) {
if (c._privateConcreteGetter != null) {
var x = c._privateConcreteGetter;
// `x` has type `int?` so this is ok
x = null;
}
}
void testPublicConcreteGetter(C c) {
if (c.publicConcreteGetter != null) {
var x = c.publicConcreteGetter;
// `x` has type `int?` so this is ok
x = null;
}
}
main() {}