ArrayList is correctly infered to List because ArrayList implements List. Same variable type for supertype parametrization.
With non trivial variable replacements the inference doesn't recognize parameters:
Subtype implements Supertype<List> (the type variable is used as argument in other type instead of supertype). I.E. Subtype turns into Supertype<List>
ArrayList is correctly infered to List because ArrayList implements List. Same variable type for supertype parametrization.
With non trivial variable replacements the inference doesn't recognize parameters:
Subtype implements Supertype<List> (the type variable is used as argument in other type instead of supertype). I.E. Subtype turns into Supertype<List>