boolean (@NotNull PsiExpression expression) { final PsiElement parent = expression.getParent(); if (parent instanceof PsiParenthesizedExpression) { return false; } if (parent instanceof PsiExpressionList) { final PsiElement grandParent = parent.getParent(); if (grandParent instanceof final PsiMethodCallExpression call) { final PsiMethod method = call.resolveMethod(); if (method != null && AnnotationUtil.isAnnotated(method, CommonClassNames.JAVA_LANG_INVOKE_MH_POLYMORPHIC, 0)) { return false; } } } final PsiType expressionType = expression.getType(); if (PsiPrimitiveType.getUnboxedType(expressionType) != null && parent instanceof PsiUnaryExpression) { final IElementType sign = ((PsiUnaryExpression)parent).getOperationTokenType(); return sign == JavaTokenType.PLUSPLUS || sign == JavaTokenType.MINUSMINUS; } if (expressionType == null || expressionType.equals(PsiTypes.voidType()) || !TypeConversionUtil.isPrimitiveAndNotNull(expressionType)) { return false; } final PsiPrimitiveType primitiveType = (PsiPrimitiveType)expressionType; final PsiClassType boxedType = primitiveType.getBoxedType(expression); if (boxedType == null) { return false; } final PsiType expectedType = ExpectedTypeUtils.findExpectedType(expression, false, true); if (expectedType == null || ClassUtils.isPrimitive(expectedType)) { return false; } if (!expectedType.isAssignableFrom(boxedType)) { // JLS 5.2 Assignment Conversion // check if a narrowing primitive conversion is applicable if (!(expectedType instanceof PsiClassType classType) || !PsiUtil.isConstantExpression(expression)) { return false; } final String className = classType.getCanonicalText(); if (!convertableBoxedClassNames.contains(className)) { return false; } return PsiTypes.byteType().equals(expressionType) || PsiTypes.charType().equals(expressionType) || PsiTypes.shortType().equals(expressionType) || PsiTypes.intType().equals(expressionType); } return true; }