// Copyright (c) 2020, 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. // The test checks for compile-time errors or their absence for cases involving // nullable receiver. class A { foo() {} int get bar => 42; void set baz(int value) {} void call() {} } class B { String toString([int extra = 42]) => super.toString(); } error(String? s, A? a, B? b) { s.length; s.substring(1, 1); a.foo(); a.bar; a.baz = 42; a(); b.toString(0); Function f1 = a; void Function() f2 = a; void Function()? f3 = a; } // It's ok to invoke members of Object on nullable types. ok(String? s, A? a, T t, B? b, Invocation i) { s == s; a == a; t == t; b == b; s.hashCode; a.hashCode; t.hashCode; b.hashCode; s.toString(); a.toString(); t.toString(); b.toString(); try { s.noSuchMethod(i); } catch (e, t) {} try { a.noSuchMethod(i); } catch (e, t) {} try { t.noSuchMethod(i); } catch (e, t) {} try { b.noSuchMethod(i); } catch (e, t) {} s.runtimeType; a.runtimeType; t.runtimeType; b.runtimeType; } main() {}