@Override public void run() { while (true) { final long currentIndex = index.getAndIncrement(); if (currentIndex >= length) { break; } System.out.println( "\t[" + currentIndex + "/" + length + "] judging " + currentIndex + " elements"); final ClonePair currentClonePair = clonePairs.get(currentIndex); final InstantCodeFragmentInfo fragment1 = currentClonePair.getFragment1(); if (clonePairsCategorizedByPath.containsKey(fragment1.getFilePath())) { final Set<ClonePair> tmpPairs = clonePairsCategorizedByPath.get(fragment1.getFilePath()); for (final ClonePair tmpPair : tmpPairs) { if (tmpPair.equals(currentClonePair)) { continue; } if (tmpPair.subsume(currentClonePair)) { subsumedClonePairs.add(currentIndex); break; } } } } }
private ConcurrentMap<Long, Set<InstantCodeFragmentInfo>> categorizeFragments( Collection<InstantCodeFragmentInfo> fragments) { final ConcurrentMap<Long, Set<InstantCodeFragmentInfo>> result = new ConcurrentHashMap<Long, Set<InstantCodeFragmentInfo>>(); final long length = fragments.size(); long count = 0; for (final InstantCodeFragmentInfo fragment : fragments) { if (result.containsKey(fragment.getHash())) { result.get(fragment.getHash()).add(fragment); } else { final Set<InstantCodeFragmentInfo> newSet = new HashSet<InstantCodeFragmentInfo>(); newSet.add(fragment); result.put(fragment.getHash(), newSet); } if (++count % 10000 == 0) { System.out.println( "\t[" + count + "/" + length + "] 1st step processed " + count + " elements"); } } System.out.println("\t[" + count + "/" + length + "] 1st step processed all elements"); return result; }