boolean (PsiType type, PsiType bound, boolean uncheckedConversionByDefault) { if (type instanceof PsiClassType) { return checkNotAssignable(bound, type, uncheckedConversionByDefault); } if (type instanceof PsiWildcardType) { if (((PsiWildcardType)type).isExtends()) { return checkExtendsWildcardCaptureFailure((PsiWildcardType)type, bound); } else if (((PsiWildcardType)type).isSuper()) { final PsiType superBound = ((PsiWildcardType)type).getSuperBound(); if (PsiUtil.resolveClassInType(superBound) instanceof PsiTypeParameter) return TypesDistinctProver.provablyDistinct(type, bound); return checkNotAssignable(bound, superBound, false); } } else if (type instanceof PsiArrayType) { return checkNotAssignable(bound, type, true); } else if (type instanceof PsiIntersectionType) { for (PsiType psiType : ((PsiIntersectionType)type).getConjuncts()) { if (!checkNotInBounds(psiType, bound, uncheckedConversionByDefault)) { return false; } } return true; } return false; }