Wait, so what's the remedy for the different types issue then? Should he coerce all these diverse types into one type just to do the comparison? That just seems wasteful.
Assuming he has to do the check that way, of course.
Better question is "Why are they gating all this crap here like that? What is the presumed set of expected outcomes?".
This code is bordering somewhere on the line between sabotage and incompetence and it smells really bad.
My solution was to change the checks into single methods and move one god-decision-making-method into classes that are components with their own logic.