@Inject
private TypeReferences typeReferences;
protected boolean isSameTypeOrAssignableToUpperBound(JvmTypeReference first, JvmTypeReference second) {
if (second == null)
return false;
<BUG>if (second.getType() == first.getType()) {
return true;</BUG>
}
if (second.getType() instanceof JvmTypeParameter) {
boolean upperBoundSeen = false;

@Inject
private XbaseTypeConformanceComputer typeConformanceComputer;
@Inject
private TypeReferences typeReferences;
protected boolean isSameTypeOrAssignableToUpperBound(JvmTypeReference first, JvmTypeReference second) {
if (second == null)
return false;
if (second.getType() == first.getType()) { // TODO: use #getRawType, handle multi types
return true;
}
if (second.getType() instanceof JvmTypeParameter) {
boolean upperBoundSeen = false;
