Closed
Description
Code generation throws an error when a nested generic bounded type argument is used. The following code reproduces the issue:
example:
abstract class Worker<T extends Worker<T>> {}
mixin Workers {
void someWork<T extends Worker<T>>() {
print('Work on: $T');
}
}
abstract class Bar<T> with Workers {}
class BackgroundWorker extends Worker<BackgroundWorker> {}
class Foo extends Bar<Foo> {
void doWork() {
someWork<BackgroundWorker>();
}
}
Bad state: T extends Worker<T> not found, scopes: [{}, {T extends Worker<T>: T}]
or simpler example:
class Foo<T> {}
abstract class Bar<T> {
Iterable<X> m1<X extends Foo<X>>(X Function(T) f);
}
abstract class FooBar<X> extends Bar<X> {}
Bad state: X extends Foo<X> not found, scopes: [{X: X}, {X extends Foo<X>: X1}]