| // Copyright (c) 2020, 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. |
| |
| import "dart:collection"; |
| import 'cast_helper.dart'; |
| |
| void main() { |
| testSetDowncast(); |
| testMapDowncast(); |
| } |
| |
| void testSetDowncast() { |
| var setEls = new Set<C?>.from(elements); |
| var dSet = Set.castFrom<C?, D?>(setEls); |
| |
| var newC = new C(); |
| dSet.add(newC); |
| // ^^^^ |
| // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE |
| // [cfe] The argument type 'C' can't be assigned to the parameter type 'D?'. |
| } |
| |
| void testMapDowncast() { |
| var map = new Map.fromIterables(elements, elements); |
| var dMap = Map.castFrom<C?, C?, D?, D?>(map); |
| |
| dMap[c] = d; |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE |
| // [cfe] A value of type 'C' can't be assigned to a variable of type 'D?'. |
| dMap[d] = c; |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT |
| // [cfe] A value of type 'C' can't be assigned to a variable of type 'D?'. |
| } |