boolean (@Nullable PsiType who, @Nullable PsiType overWhom) { if (who == null || overWhom == null) return false; if (who.getCanonicalText().equals(overWhom.getCanonicalText())) return true; overWhom = TypeConversionUtil.erasure(overWhom); PsiType baseType = TypeConversionUtil.erasure(who); if(overWhom.equals(PsiTypes.nullType())) return who instanceof PsiClassType || who instanceof PsiArrayType; if (overWhom instanceof PsiArrayType || baseType instanceof PsiArrayType) { return baseType != null && TypeConversionUtil.isAssignable(baseType, overWhom); } PsiClass typeClass = PsiTypesUtil.getPsiClass(overWhom); PsiClass baseTypeClass = PsiTypesUtil.getPsiClass(baseType); return typeClass != null && baseTypeClass != null && InheritanceUtil.isInheritorOrSelf(typeClass, baseTypeClass, true); }