blob: 3a4660a065cc270219eec5a24a3d77d4047637b0 [file] [log] [blame]
/*
* 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.
*/
/**
* @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
}