| // TODO(multitest): This was automatically migrated from a multitest and may | 
 | // contain strange or dead code. | 
 |  | 
 | // Copyright (c) 2015, 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. | 
 |  | 
 | // Verify semantics of the ?. operator when it does not appear on the LHS of an | 
 | // assignment. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 | import "conditional_access_helper.dart" as h; | 
 |  | 
 | class B {} | 
 |  | 
 | class C extends B { | 
 |   int? v; | 
 |   C(this.v); | 
 |   static int? staticInt; | 
 | } | 
 |  | 
 | C? nullC() => null; | 
 |  | 
 | main() { | 
 |   // Make sure the "none" test fails if property access using "?." is not | 
 |   // implemented.  This makes status files easier to maintain. | 
 |   nullC()?.v; | 
 |  | 
 |   // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1). | 
 |  | 
 |  | 
 |  | 
 |   // C?.id is equivalent to C.id. | 
 |  | 
 |   { h.C.staticInt = 1; Expect.equals(1, h.C?.staticInt); } | 
 |  | 
 |   // The static type of e1?.d is the static type of e1.id. | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |   // Let T be the static type of e1 and let y be a fresh variable of type T. | 
 |   // Exactly the same static warnings that would be caused by y.id are also | 
 |   // generated in the case of e1?.id. | 
 |  | 
 |  | 
 |  | 
 |   // '?.' cannot be used to access toplevel properties in libraries imported via | 
 |   // prefix. | 
 |  | 
 |  | 
 |   // Nor can it be used to access the hashCode getter on the class Type. | 
 |  | 
 |  | 
 | } |