ConversionResult (@NotNull PsiType targetType, @NotNull PsiType actualType, @NotNull PsiElement context, @NotNull Position position) { if (actualType instanceof PsiIntersectionType) { ConversionResult min = ConversionResult.ERROR; for (PsiType child : ((PsiIntersectionType)actualType).getConjuncts()) { final ConversionResult result = canAssign(targetType, child, context, position); if (result.ordinal() < min.ordinal()) { min = result; } if (min == ConversionResult.OK) { return ConversionResult.OK; } } return min; } if (targetType instanceof PsiIntersectionType) { ConversionResult max = ConversionResult.OK; for (PsiType child : ((PsiIntersectionType)targetType).getConjuncts()) { final ConversionResult result = canAssign(child, actualType, context, position); if (result.ordinal() > max.ordinal()) { max = result; } if (max == ConversionResult.ERROR) { return ConversionResult.ERROR; } } return max; } final ConversionResult result = areTypesConvertible(targetType, actualType, context, position); if (result != null) return result; if (isAssignableWithoutConversions(targetType, actualType)) { return ConversionResult.OK; } final PsiManager manager = context.getManager(); final GlobalSearchScope scope = context.getResolveScope(); targetType = boxPrimitiveType(targetType, manager, scope); actualType = boxPrimitiveType(actualType, manager, scope); if (targetType.isAssignableFrom(actualType)) { return ConversionResult.OK; } return ConversionResult.ERROR; }