| // Copyright (c) 2019, 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. |
| |
| // @dart=2.9 |
| |
| class A {} |
| class B extends A {} |
| class C extends B {} |
| |
| class GenericClass<T> {} |
| |
| extension GenericExtension<T> on GenericClass<T> { |
| T get property => null; |
| |
| T method(T t) => null; |
| |
| S genericMethod1<S>(S s) => null; |
| } |
| |
| main() { |
| A aVariable; |
| C cVariable; |
| |
| GenericClass<A> aClass; |
| GenericClass<B> bClass; |
| GenericClass<C> cClass; |
| |
| cVariable = aClass.property; |
| cVariable = bClass.property; |
| aVariable = cClass.property; |
| |
| cVariable = aClass.method(aVariable); |
| cVariable = bClass.method(aVariable); |
| aVariable = cClass.method(aVariable); |
| |
| cVariable = aClass.genericMethod1(aVariable); |
| cVariable = aClass.genericMethod1<A>(aVariable); |
| cVariable = aClass.genericMethod1<B>(aVariable); |
| cVariable = aClass.genericMethod1<C>(aVariable); |
| |
| cVariable = bClass.genericMethod1(aVariable); |
| cVariable = bClass.genericMethod1<A>(aVariable); |
| cVariable = bClass.genericMethod1<B>(aVariable); |
| cVariable = bClass.genericMethod1<C>(aVariable); |
| |
| cVariable = cClass.genericMethod1(aVariable); |
| cVariable = cClass.genericMethod1<A>(aVariable); |
| cVariable = cClass.genericMethod1<B>(aVariable); |
| cVariable = cClass.genericMethod1<C>(aVariable); |
| } |