Harmony Team, Some of the Java code in Harmony suffers from being written in a non-Java style. In particular, our Java code often attempts to limit the number of exit points from a method. This approach is common in C/C++ programs because of the need to manually collect garbage. But the approach has no advantages in Java. I dislike it because it requires the reader to carry more in their mental stack.
Consider LogManager.readConfiguration(), the bulk of which lives inside an if() block: public void readConfiguration() throws IOException { // check config class String configClassName = System .getProperty("java.util.logging.config.class"); if (null == configClassName || null == getInstanceByClass(configClassName)) { // if config class failed, check config file String configFile = System .getProperty("java.util.logging.config.file"); if (null == configFile) { // if cannot find configFile, use default logging.properties configFile = new StringBuilder().append( System.getProperty("java.home")).append(File.separator) .append("lib").append(File.separator).append( "logging.properties").toString(); } InputStream input = null; try { input = new BufferedInputStream(new FileInputStream(configFile)); readConfiguration(input); } finally { if (input != null) { try { input.close(); } catch (Exception e) {// ignore } } } } } By using an eager return, the code needs fewer layers of indentation and thus feels simpler (at least to the colleagues I've asked): public void readConfiguration() throws IOException { // check config class String configClassName = System .getProperty("java.util.logging.config.class"); if (null != configClassName && null != getInstanceByClass(configClassName)) { return; } // if config class failed, check config file String configFile = System .getProperty("java.util.logging.config.file"); if (null == configFile) { // if cannot find configFile, use default logging.properties configFile = new StringBuilder().append( System.getProperty("java.home")).append(File.separator) .append("lib").append(File.separator).append( "logging.properties").toString(); } InputStream input = null; try { input = new BufferedInputStream(new FileInputStream(configFile)); readConfiguration(input); } finally { if (input != null) { try { input.close(); } catch (Exception e) {// ignore } } } } In patches I'll be submitting, I'll use the second form, which is idiomatic Java. I may also submit patches that convert the first style to the second, but usually only when there's other useful cleanup to accompany it. If you'd rather I not, please let me know and we'll arm-wrestle. Cheers, Jesse