in duplicates/ide/impl/src/org/netbeans/modules/jackpot30/impl/duplicates/indexing/RemoteDuplicatesIndex.java [236:286]
private static List<DuplicateDescription> translate(Map<String, long[]> hashes, Map<String, Map<RemoteIndex, Collection<String>>> occ, FileObject currentFile) {
Map<String, Map<RemoteIndex, Collection<String>>> sorted = hashMap();
Map<long[], DuplicateDescription> result = new LinkedHashMap<long[], DuplicateDescription>();
List<long[]> seen = new LinkedList<long[]>();
sorted.putAll(occ);
OUTER: for (Entry<String, Map<RemoteIndex, Collection<String>>> e : occ.entrySet()) {
long[] currentSpan = hashes.get(e.getKey());
for (Iterator<Entry<long[], DuplicateDescription>> it = result.entrySet().iterator(); it.hasNext();) {
Entry<long[], DuplicateDescription> span = it.next();
if (span.getKey()[0] <= currentSpan[0] && span.getKey()[1] >= currentSpan[1]) {
continue OUTER;
}
if (currentSpan[0] <= span.getKey()[0] && currentSpan[1] >= span.getKey()[1]) {
it.remove();
}
}
if (currentSpan[0] == (-1) || currentSpan[1] == (-1)) continue;
seen.add(currentSpan);
String longest = e.getKey();
List<Span> foundDuplicates = new LinkedList<Span>();
for (Entry<RemoteIndex, Collection<String>> root2Occurrences : e.getValue().entrySet()) {
FileObject localRoot = URLMapper.findFileObject(root2Occurrences.getKey().getLocalFolder());
for (String cand : root2Occurrences.getValue()) {
FileObject o = localRoot.getFileObject(cand);
if (o == null) continue; //XXX log!
if (areEquivalent(currentFile, o)) continue;
foundDuplicates.add(new Span(o, -1, -1));
}
}
if (foundDuplicates.isEmpty()) continue;
DuplicateDescription current = DuplicateDescription.of(foundDuplicates, getValue(longest), longest);
result.put(currentSpan, current);
}
return new LinkedList<DuplicateDescription>(result.values());
}