Code like this one: ``` import java.util.stream.Stream; public class DontCaptureForTypesWithSameClassTest01 { interface I <E extends Exception> {} static public <E extends Exception> void m(I<? extends E>[] actions) throws E { foo(Stream.of(actions)); } static public <E extends Exception> void foo(Stream<I<? extends E>> actions) throws E {} } ``` used to work and it stopped being accepted by the compiler after fix for [JDK-8039214](https://bugs.openjdk.java.net/browse/JDK-8039214). It's not that fix for [JDK-8039214](https://bugs.openjdk.java.net/browse/JDK-8039214) was incorrect but that it uncovered bugs in the language specification and subsequently in the compiler implementation. The proposed solution for this issue is skip capture conversion before subtyping tests if both types being compared are parameterizations of the same class or interface.