PsiExpression (PsiClassType type, PsiPrimitiveType primitiveType, PsiExpression expression) { expression = PsiUtil.skipParenthesizedExprDown(expression); if (expression == null) return null; if (primitiveType.equals(expression.getType())) { return expression; } if (expression instanceof PsiMethodCallExpression call) { if (!"valueOf".equals(call.getMethodExpression().getReferenceName())) return null; PsiExpression[] args = call.getArgumentList().getExpressions(); if (args.length != 1) return null; PsiMethod method = call.resolveMethod(); if (method == null || type.resolve() != method.getContainingClass()) return null; return checkPrimitive(args[0]); } if (expression instanceof PsiTypeCastExpression cast) { if (!type.equals(cast.getType())) return null; return checkPrimitive(cast.getOperand()); } if (expression instanceof PsiNewExpression newExpression) { if (!type.equals(newExpression.getType())) return null; PsiExpressionList argumentList = newExpression.getArgumentList(); if (argumentList == null) return null; PsiExpression[] args = argumentList.getExpressions(); if (args.length != 1) return null; if (!(args[0].getType() instanceof PsiPrimitiveType)) return null; return checkPrimitive(args[0]); } return null; }