| // Copyright (c) 2018, 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. |
| |
| // @dart = 2.9 |
| |
| /// @assertion For set literals with element type T, the static type is always |
| /// Set<T>, but static analysis will reject an assignment of a non-constant set |
| /// literal to a type that is not a super-type of LinkedHashSet<T> (an implicit |
| /// down-cast below the type LinkedHashSet<T>), and of a constant set literal to |
| /// a type that is not a super-type of Set<T> (that is, any implicit down-cast). |
| /// |
| /// @description Check that static analysis will reject an assignment of a |
| /// non-constant set literal to a type that is not a super-type of |
| /// LinkedHashSet<T> |
| /// @author sgrekhov@unipro.ru |
| |
| import "dart:collection"; |
| |
| class C<T> with SetMixin<T> implements LinkedHashSet<T> { |
| |
| |
| factory C({bool equals(T e1, T e2), |
| int hashCode(T e), |
| bool isValidKey(potentialKey)}) {} |
| |
| @override |
| bool add(T value) { |
| // TODO: implement add |
| return null; |
| } |
| |
| @override |
| T lookup(Object element) { |
| // TODO: implement lookup |
| return null; |
| } |
| |
| @override |
| bool remove(Object value) { |
| // TODO: implement remove |
| return null; |
| } |
| |
| @override |
| bool contains(Object element) { |
| // TODO: implement contains |
| return null; |
| } |
| |
| @override |
| Set<T> toSet() { |
| // TODO: implement toSet |
| return null; |
| } |
| |
| @override |
| // TODO: implement iterator |
| Iterator<T> get iterator => null; |
| |
| @override |
| // TODO: implement length |
| int get length => null; |
| } |
| |
| main() { |
| C<int> c = <int> {}; //# 01: compile-time error |
| C<int> c = {3, 1, 4,}; //# 02: compile-time error |
| C c = {3, 1, 4,}; //# 03: compile-time error |
| dynamic d; |
| C c = {3, 1, 4,null, d}; //# 04: compile-time error |
| } |