public CaliperConfig loadOrCreate() throws InvalidConfigurationException { File configFile = options.caliperConfigFile(); ImmutableMap<String, String> defaults; try { defaults = Util.loadProperties( Util.resourceSupplier(CaliperConfig.class, "global-config.properties")); } catch (IOException impossible) { throw new AssertionError(impossible); } // TODO(kevinb): deal with migration issue from old-style .caliperrc if (configFile.exists()) { try { ImmutableMap<String, String> user = Util.loadProperties(Files.asByteSource(configFile)); return new CaliperConfig(mergeProperties(options.configProperties(), user, defaults)); } catch (IOException keepGoing) { } } ByteSource supplier = Util.resourceSupplier(CaliperConfig.class, "default-config.properties"); tryCopyIfNeeded(supplier, configFile); ImmutableMap<String, String> user; try { user = Util.loadProperties(supplier); } catch (IOException e) { throw new AssertionError(e); // class path must be messed up } return new CaliperConfig(mergeProperties(options.configProperties(), user, defaults)); }