// 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.

/// @assertion It is permitted to invoke or tear-off a method, setter, getter, or
/// operator that is defined on Object on potentially nullable type. The type
/// used for static analysis of such an invocation or tear-off shall be the type
/// declared on the relevant member on Object. For example, given a receiver o of
/// type T?, invoking an Object member on o shall use the type of the member as
/// declared on Object, regardless of the type of the member as declared on T (
/// note that the type as declared on T must be a subtype of the type on Object,
/// and so choosing the Object type is a sound choice. The opposite choice is not
/// sound).
///
/// @description Checks that it is permitted to invoke or tear-off a method,
/// setter, getter, or operator that is defined on Object on potentially nullable
/// type. The type used for static analysis of such an invocation or tear-off
/// shall be the type declared on the relevant member on Object.
/// @issue 41282
/// @author sgrekhov@unipro.ru

class T implements Type {}

class C {
  T get runtimeType => new T();
}

main() {
  C c1 = new C();
  T t1 = c1.runtimeType;

  var c2 = new C() as C?;
  T t2 = c2.runtimeType;
//       ^^
// [analyzer] unspecified
// [cfe] unspecified
}
