We changed the build environment to support ``.Java'' files, which are preprocessed by the cpp preprocessor into ``.java'' files.
This might be a controversial undertaking; C and C++ have often been criticized for encouraging programmers to make overly liberal use of the preprocessor, which can decrease the readability of code. We believe that the preprocessor should be used sparingly, in the spirit of Java.
We use it to avoid having to hardcode package and import names, for assertions (since the compiler will not eliminate function calls if debug is disabled), and for conversion macros (such as extracting an integer value from an array of bytes) since the Java compiler does not inline these functions.