Files
sdk/pkg/front_end/testcases/nnbd/nullable_object_access.dart
T
Lasse R.H. Nielsen 2a38b22aed Add a few more class modifiers.
Mostly interface on classes that can't be extended anyway.
A few `final` implementation classes.

Tested: No new functionality, only restrictions.
CoreLibraryReviewExempt: Just modifiers.
Change-Id: I1f298fe43836892c94c0b23326fda37b1904ec6a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/293683
Auto-Submit: Lasse Nielsen <lrn@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
Commit-Queue: Lasse Nielsen <lrn@google.com>
2023-04-07 21:54:44 +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 implements 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
}