You are right, that it has always been there, in spite of tests around to check for it. And it had nothing to do with generics. There were even tests for it, but the bug wasn't caught due to a horrible reason: depended on the order in which the files were woven.
--------------------------------------
Yawn-inducing details follow.
Consider:
interface Response {
String get() throws Pausable
}
and a code that uses it:
class Foo {
Response resp ..
resp.get();
}
Now, if the weaver tackles Foo first, it looks at the invocation of resp.get(), determines from the signature that Response.get() is Pausable, and everything works as expected.
But if Response is woven first, the method gets an extra Fiber method.
interface Response {
String get(Fiber)
}
Now when Foo() is woven, the weaver looks for Response.get(), but only has access to Response.get(Fiber). It determines erroneously that the method is not pausable.