private static @Nullable @Nls String getCallSideEffectDescription(PsiMethodCallExpression call) {
    PsiMethod method = call.resolveMethod();
    if (method == null) return null;
    if (JavaMethodContractUtil.isPure(method)) return null;
    MutationSignature signature = MutationSignature.fromMethod(method);
    if (signature.mutatesAnything()) {
      if (signature.performsIO()) {
        return InspectionGadgetsBundle.message("assert.with.side.effects.call.performs.io", method.getName());
      }
      PsiExpression expression =
        signature.mutatedExpressions(call).filter(expr -> !ExpressionUtils.isNewObject(expr)).findFirst().orElse(null);
      if (expression != null) {
        return InspectionGadgetsBundle.message("assert.with.side.effects.call.mutates.expression", method.getName(), expression.getText());
      }
    }
    final PsiCodeBlock body = method.getBody();
    if (body == null) {
      return null;
    }
    final MethodSideEffectVisitor visitor = new MethodSideEffectVisitor();
    body.accept(visitor);
    String description = visitor.getMutatedField();
    if (description != null) {
      return InspectionGadgetsBundle.message("assert.with.side.effects.call.mutates.field", method.getName(), description);
    }
    return null;
  }
private static @Nullable @Nls String getCallSideEffectDescription(PsiMethodCallExpression call)