The main reasons for this kind of syntax lie in the area of the crucial new features we have added: type inference and higher-order funcitons.
The Java-style syntax is pretty hostile to these features: they just don't fit in. Also, we find it easier to read the name of the entity before the type, and the code is read much more than written.
I understand your concern about the IDE experience, and we will address it on the IDE level: the idea is that you say
If you're assigning a value you can use the introduce variable refactoring:
CMF <enter> -> CoolMessageFactory()
introduce variable -> val coolMessageFactory = CoolMessageFactory()
I use this all the time in Java.
If you’re not assigning a value it should also be possible to use live templates. e.g.
var $NAME$: $TYPE$
with the variables in the order TYPE, NAME.
That means the type of the variable would be known before the name and IntelliJ could use the type to suggest a name. Unfortunately it doesn’t work at the moment.