| // 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. | |
| class SuperClass { | |
| const SuperClass(); | |
| bool operator ==(Object other); | |
| } | |
| class Class extends SuperClass { | |
| const Class(); | |
| bool operator ==(Object other); | |
| } | |
| class SubClass extends Class { | |
| const SubClass(); | |
| bool operator ==(Object other) => false; | |
| } | |
| main() { | |
| // This test verifies that when overriding `==` it is a compile time error to | |
| // use that class as a key in a switch, but only if the override provides a | |
| // body. However, with NNBD, all of these switches became compile time errors | |
| // so now we cast `null` as `dynamic` to get these first two switches past | |
| // the compiler. | |
| switch (null as dynamic) { | |
| case const SuperClass(): | |
| break; | |
| default: | |
| } | |
| switch (null as dynamic) { | |
| case const Class(): | |
| break; | |
| default: | |
| } | |
| switch (null as dynamic) { | |
| case const SubClass(): | |
| break; | |
| default: | |
| } | |
| switch (null) { | |
| case null: | |
| break; | |
| default: | |
| } | |
| } |