e9ca413263
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>
64 lines
2.0 KiB
Dart
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
|
|
}
|