/** * This method was simply: * * <p>for(String line:StringUtils.iterLines(fileContents)){ line = line.trim(); List<String> split * = StringUtils.split(line, '|'); handleLineParts(modulesManager, intToString, split); } * * <p>and was changed to be faster (as this was one of the slow things in startup). */ /*default*/ @SuppressWarnings("rawtypes") static void handleFileContents( ModulesManager modulesManager, String fileContents, HashMap<Integer, String> intToString) { String string = fileContents; int len = string.length(); final ArrayList<ModulesKey> lst = new ArrayList<ModulesKey>(); char c; int start = 0; int i = 0; String[] parts = new String[4]; int partsFound = 0; for (; i < len; i++) { c = string.charAt(i); if (c == '\r') { String trimmed = string.substring(start, i).trim(); if (trimmed.length() > 0) { parts[partsFound] = trimmed; partsFound++; } handleLineParts(modulesManager, intToString, parts, partsFound, lst); partsFound = 0; if (i < len - 1 && string.charAt(i + 1) == '\n') { i++; } start = i + 1; } else if (c == '\n') { String trimmed = string.substring(start, i).trim(); if (trimmed.length() > 0) { parts[partsFound] = trimmed; partsFound++; } handleLineParts(modulesManager, intToString, parts, partsFound, lst); partsFound = 0; start = i + 1; } else if (c == '|') { String trimmed = string.substring(start, i).trim(); if (trimmed.length() > 0) { parts[partsFound] = trimmed; partsFound++; } start = i + 1; } } if (start < len && start != i) { String trimmed = string.substring(start, i).trim(); if (trimmed.length() > 0) { parts[partsFound] = trimmed; partsFound++; } handleLineParts(modulesManager, intToString, parts, partsFound, lst); } try { final int size = lst.size(); // As we saved in sorted order, we can build in sorted order too (which is MUCH faster than // adding items one // by one). modulesManager.modulesKeys.buildFromSorted( size, new Iterator() { private int i = 0; public boolean hasNext() { return i < size; } public Object next() { final ModulesKey next = lst.get(i); i++; return new Map.Entry() { public Object getKey() { return next; } public Object getValue() { return next; } public Object setValue(Object value) { throw new UnsupportedOperationException(); } }; } public void remove() { throw new UnsupportedOperationException(); } }, null, null); } catch (Exception e) { throw new RuntimeException(e); } }