сеттер вроде как для того и нужен чтобы там был код)
Я полагаю, что размещать сложную логику в сеттере нельзя
Для этого лучше использовать метод типа changeCurrentState(), например
А размещение в нем сторонней логики мне кажется и вовсе странным (я про первые две строчки сеттера)