Files
sdk/pkg/front_end/testcases/nnbd/nullable_object_access.dart
T
Johnni Winther e9ca413263 [cfe] Handle nullable access to extension members
Closes #41349
Closes #41495

Change-Id: I1893502592af1615184b5dd294e1835b51959a07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144761
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2020-04-27 13:47:08 +00:00

64 lines
2.0 KiB
Dart

// 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.
abstract class CustomType extends Type {
void call() {}
}
abstract class CustomInvocation implements Invocation {}
abstract class Class {
CustomType get runtimeType;
String noSuchMethod(covariant CustomInvocation invocation);
bool operator ==(covariant Class o);
String toString({Object o});
}
main() {}
void test(Class c1, Class? c2, Invocation invocation,
CustomInvocation customInvocation) {
CustomType runtimeType1 = c1.runtimeType; // ok
var runtimeTypeVariable1 = c1.runtimeType;
c1.runtimeType(); // ok
String Function(CustomInvocation) noSuchMethodTearOff1 =
c1.noSuchMethod; // ok
var noSuchMethodTearOffVariable1 = c1.noSuchMethod;
String noSuchMethod1a = c1.noSuchMethod(customInvocation); // ok
String noSuchMethod1b = c1.noSuchMethod(invocation); // error
var noSuchMethodVariable1 = c1.noSuchMethod(customInvocation);
c1 == ''; // error
c1 == c2; // ok
String Function({Object o}) toStringTearOff1 = c1.toString; // ok
var toStringTearOffVariable1 = c1.toString;
c1.toString(o: c1); // ok
CustomType runtimeType2 = c2.runtimeType; // error
var runtimeTypeVariable2 = c2.runtimeType;
c2.runtimeType(); // error
String Function(CustomInvocation) noSuchMethodTearOff2 =
c2.noSuchMethod; // error
var noSuchMethodTearOffVariable2 = c2.noSuchMethod;
int noSuchMethod2 = c2.noSuchMethod(invocation); // ok
var noSuchMethodVariable2 = c2.noSuchMethod(invocation);
// TODO(johnniwinther): Awaiting spec update about `==`. Before NNBD this
// would cause an error but with the current (insufficient) specification for
// `==` it is ok (even though `c1 == ''` is an error).
c2 == ''; // ok or error?
c2 == c1; // ok
String Function({Object o}) toStringTearOff2 = c2.toString; // error
var toStringTearOffVariable2 = c2.toString;
c2.toString(o: c1); // error
}