javac's treatment of capture is often inconsistent with the specification. Sometimes capture occurs in places other than where it is specified. Sometimes a capture variable is "widened" to its upper bound.
The changes necessary to match the specification seem to run pretty deep; there doesn't seem to be an easy quick fix.
There may be some value in javac's behavior; if so, it should be identified and pushed back into the specification.