What needs to be done?
Currently we have only one Definition which handles all possible Entry Types.
We should split it into dedicated types which will improve static analysis but also help to break very complicated logic from Definition::merge() or Defitnion::isCompatible()