public static FileLocation merge(List<FileLocation> locations) { checkArgument(!Iterables.isEmpty(locations)); String fileName = null; String niceFileName = null; int startingLine = Integer.MAX_VALUE; int startingLineInOrigin = Integer.MAX_VALUE; int endingLine = Integer.MIN_VALUE; int endingLineInOrigin = Integer.MIN_VALUE; for (FileLocation loc : locations) { if (loc == DUMMY) { continue; } if (fileName == null) { fileName = loc.fileName; niceFileName = loc.niceFileName; } else if (!fileName.equals(loc.fileName)) { return MULTIPLE_FILES; } startingLine = Math.min(startingLine, loc.getStartingLineNumber()); startingLineInOrigin = Math.min(startingLineInOrigin, loc.getStartingLineInOrigin()); endingLine = Math.max(endingLine, loc.getEndingLineNumber()); endingLineInOrigin = Math.max(endingLineInOrigin, loc.getEndingLineInOrigin()); } if (fileName == null) { // only DUMMY elements return DUMMY; } return new FileLocation( fileName, niceFileName, 0, 0, startingLine, endingLine, startingLineInOrigin, endingLineInOrigin); }