If 'text' will be protected you can override TextField and change it every time when you need it without any checking in 'paste' and clearing selection. Same for cursor. 
'hasSelection' can be setted to true only by 'setSelection' which have too much checking for these two arguments. What if i just need the set 'hasSelection' to true without all this stuff? Same for 'selectionStart'.
But 'messageText' can be private, yes. I not noticed that it have a setter without any checking.