blob: 5b091df934878cd3529da790c341de5c45c8baf3 [file] [log] [blame]
// 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.
class C<T extends num?> {
void promotes(T t) {
if (t is int) {
/*T & int*/ t;
}
}
void promoteNullable(T? t) {
T? s;
if (t is int) {
s = /*T & int*/ t;
}
}
void doesNotPromote(T t) {
if (t is String) {
t;
}
}
void nonNull(T t) {
if (t != null) {
/*T & num*/ t;
}
}
}
class D<T extends dynamic> {
void nonNull(T t) {
if (t != null) {
// Does not promote because the bound (`dynamic`) has no
// non-nullable counterpart
t;
}
}
}
class E<T> {
void nonNull(T t) {
if (t != null) {
/*T & Object*/ t;
}
}
}
class F<S, T extends S> {
void nonNull(T t) {
if (t != null) {
/*T & S & Object*/ t;
}
}
}