/** Creates an "OriginalMapping" object for the given entry object. */ private OriginalMapping getOriginalMappingForEntry(Entry entry) { if (entry.getSourceFileId() == UNMAPPED) { return null; } else { // Adjust the line/column here to be start at 1. Builder x = OriginalMapping.newBuilder() .setOriginalFile(sources[entry.getSourceFileId()]) .setLineNumber(entry.getSourceLine() + 1) .setColumnPosition(entry.getSourceColumn() + 1); if (entry.getNameId() != UNMAPPED) { x.setIdentifier(names[entry.getNameId()]); } return x.build(); } }
/** * Reverse the source map; the created mapping will allow us to quickly go from a source file and * line number to a collection of target OriginalMappings. */ private void createReverseMapping() { reverseSourceMapping = new HashMap<String, Map<Integer, Collection<OriginalMapping>>>(); for (int targetLine = 0; targetLine < lines.size(); targetLine++) { ArrayList<Entry> entries = lines.get(targetLine); if (entries != null) { for (Entry entry : entries) { if (entry.getSourceFileId() != UNMAPPED && entry.getSourceLine() != UNMAPPED) { String originalFile = sources[entry.getSourceFileId()]; if (!reverseSourceMapping.containsKey(originalFile)) { reverseSourceMapping.put( originalFile, new HashMap<Integer, Collection<OriginalMapping>>()); } Map<Integer, Collection<OriginalMapping>> lineToCollectionMap = reverseSourceMapping.get(originalFile); int sourceLine = entry.getSourceLine(); if (!lineToCollectionMap.containsKey(sourceLine)) { lineToCollectionMap.put(sourceLine, new ArrayList<OriginalMapping>(1)); } Collection<OriginalMapping> mappings = lineToCollectionMap.get(sourceLine); Builder builder = OriginalMapping.newBuilder() .setLineNumber(targetLine) .setColumnPosition(entry.getGeneratedColumn()); mappings.add(builder.build()); } } } } }