blob: 26ec8b37b39027a2bfd965a5477006c724186e9a [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by b
// BSD-style license that can be found in the LICENSE file.
extension type ET1(int i) {
ET1? operator +(ET1? i) => i;
int operator -() => i;
int operator [](int index) => i;
void operator []=(int index, int value) {}
void foo(int i) {}
int get getter => i;
void set setter(int value) {}
}
extension type ET2<T>(T t) {
ET2<T>? operator +(ET2<T>? t) => t;
T operator -() => t;
T operator [](int index) => t;
void operator []=(int index, T value) {}
void foo(T t) {}
T get getter => t;
void set setter(T value) {}
}
method1(ET1 et) {
et.foo(0); // Ok
et.foo; // Ok
et.setter = et.getter; // Ok
et + et; // Ok
-et; // Ok
et[0]; // Ok
et[0] = 0; // Ok
}
method2(ET1? et) {
et.foo(0); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = 0; // Error
}
method3<S>(S s, ET2<S> et) {
et.foo(s); // Ok
et.foo; // Ok
et.setter = et.getter; // Ok
et + et; // Ok
-et; // Ok
et[0]; // Ok
et[0] = s; // Ok
}
method4<S>(S s, ET2<S>? et) {
et.foo(s); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = s; // Error
}
method5<S, U extends ET2<S>>(S s, U et) {
et.foo(s); // Ok
et.foo; // Ok
et.setter = et.getter; // Ok
et + et; // Ok
-et; // Ok
et[0]; // Ok
et[0] = s; // Ok
}
method6<S, U extends ET2<S>>(S s, U? et) {
et.foo(s); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = s; // Error
}
method7<S, U extends ET2<S>, V extends U>(S s, V et) {
et.foo(s); // Ok
et.foo; // Ok
et.setter = et.getter; // Ok
et + et; // Ok
-et; // Ok
et[0]; // Ok
et[0] = s; // Ok
}
method8<S, U extends ET2<S>, V extends U>(S s, V? et) {
et.foo(s); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = s; // Error
}
method9<S, U extends ET2<S>, V extends U?>(S s, V et) {
et.foo(s); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = s; // Error
}
method10<S, U extends ET2<S>?, V extends U>(S s, V et) {
et.foo(s); // Error
et.foo; // Error
et.setter = // Error
et.getter; // Error
et + et; // Error
-et; // Error
et[0]; // Error
et[0] = s; // Error
}