PsiType (PsiTypeParameter typeParameter, PsiType[] extendsTypes, PsiSubstitutor substitutor, PsiElement context, boolean allowUncheckedConversion) { PsiType substituted = substitutor.substitute(typeParameter); if (substituted == null) return null; if (context != null) { substituted = PsiUtil.captureToplevelWildcards(substituted, context); } if (substituted instanceof PsiWildcardType) { if (((PsiWildcardType)substituted).isSuper()) { return null; } } for (PsiType type : extendsTypes) { PsiType extendsType = substitutor.substitute(type); if (extendsType != null && !TypeConversionUtil.isAssignable(extendsType, substituted, allowUncheckedConversion)) { return extendsType; } } return null; }