| // 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: | 
 |   } | 
 | } |