private void findOverlappingJarsPairs(List<ClasspathResourceVersion> versions, Map<JarPair, JarPair> overlapPairs, int anchorIndex) { ClasspathResourceVersion anchor = versions.get(anchorIndex); for (int i = anchorIndex + 1; i < versions.size(); i++) { JarPair overlapPair = new JarPair( anchor.getClasspathEntry(), versions.get(i).getClasspathEntry()); if (!overlapPairs.containsKey(overlapPair)) { overlapPairs.put(overlapPair, overlapPair); } overlapPairs.get(overlapPair).incrementDupClassesTotal(); } if (anchorIndex + 1 < versions.size()) { findOverlappingJarsPairs(versions, overlapPairs, anchorIndex + 1); } } }
private void findOverlappingJarsPairs(List<ClasspathResourceVersion> versions, Map<JarPair, JarPair> overlapPairs, int anchorIndex) { ClasspathResourceVersion anchor = versions.get(anchorIndex); for (int i = anchorIndex + 1; i < versions.size(); i++) { JarPair overlapPair = new JarPair( anchor.getClasspathEntry(), versions.get(i).getClasspathEntry()); if (!overlapPairs.containsKey(overlapPair)) { overlapPairs.put(overlapPair, overlapPair); } overlapPairs.get(overlapPair).incrementDupClassesTotal(); } if (anchorIndex + 1 < versions.size()) { findOverlappingJarsPairs(versions, overlapPairs, anchorIndex + 1); } } }
/** * * @return - a list of jar pairs that have overlapping class files - only a limited list of classpath resources is * considered. * */ public List<JarPair> findOverlappingJars(List<ClasspathResource> classpathResources, boolean excludeSameSizeDups) { List<ClasspathResource> classFilesWithDuplicates = findClassFileDuplicates(classpathResources, excludeSameSizeDups); //jar overlap report Map<JarPair, JarPair> overlapPairs = new HashMap<>(); for (ClasspathResource classFile : classFilesWithDuplicates) { List<ClasspathResourceVersion> versions = classFile.getResourceFileVersions(); findOverlappingJarsPairs(versions, overlapPairs, 0); } List<JarPair> overlapReportLines = new ArrayList<>(overlapPairs.keySet()); Comparator<JarPair> comparator = new Comparator<JarPair>() { @Override public int compare(JarPair line1, JarPair line2) { return -1 * line1.getDupClassesTotal().compareTo(line2.getDupClassesTotal()); } }; Collections.sort(overlapReportLines, comparator); return overlapReportLines; }
/** * * @return - a list of jar pairs that have overlapping class files - only a limited list of classpath resources is * considered. * */ public List<JarPair> findOverlappingJars(List<ClasspathResource> classpathResources, boolean excludeSameSizeDups) { List<ClasspathResource> classFilesWithDuplicates = findClassFileDuplicates(classpathResources, excludeSameSizeDups); //jar overlap report Map<JarPair, JarPair> overlapPairs = new HashMap<>(); for (ClasspathResource classFile : classFilesWithDuplicates) { List<ClasspathResourceVersion> versions = classFile.getResourceFileVersions(); findOverlappingJarsPairs(versions, overlapPairs, 0); } List<JarPair> overlapReportLines = new ArrayList<>(overlapPairs.keySet()); Comparator<JarPair> comparator = new Comparator<JarPair>() { @Override public int compare(JarPair line1, JarPair line2) { return -1 * line1.getDupClassesTotal().compareTo(line2.getDupClassesTotal()); } }; Collections.sort(overlapReportLines, comparator); return overlapReportLines; }