Note that internal names are mangled only inside classes (and not on the top level), and the primary goal of that is not to complicate calls from java, but rather to avoid internal member clashes in inherited classes. The former comes as a nice bonus.