private void createDuplicatedFilesMap()

in codeanalyzer/src/main/java/nl/obren/sokrates/sourcecode/duplication/impl/Blocks.java [73:108]


    private void createDuplicatedFilesMap() {
        resetProgressValues(blocksDuplicatedAmongFiles.size());
        reportProgress("Creating a map of duplicated files");
        blocksDuplicatedAmongFiles.forEach(db -> {
            reportProgressNextStep();
            if (db.getFiles().size() == 2) {
                duplicatedFilePairs.add(db);
                SourceFile sourceFile1 = db.getFiles().get(0);
                SourceFile sourceFile2 = db.getFiles().get(1);
                String pairKey1 = sourceFile1.getFile().getPath() + "::" + sourceFile2.getFile().getPath();
                String pairKey2 = sourceFile2.getFile().getPath() + "::" + sourceFile1.getFile().getPath();

                if (!(filePairMap.containsKey(pairKey1) || filePairMap.containsKey(pairKey2))) {
                    filePairMap.put(pairKey1, new ImmutablePair<>(sourceFile1, sourceFile2));
                }
            } else if (db.getFiles().size() > 2) {
                db.getFiles().forEach(f1 -> {
                    db.getFiles().stream().filter(f2 -> f1 != f2).forEach(f2 -> {
                        Block newBlock = new Block();
                        duplicatedFilePairs.add(newBlock);
                        newBlock.setLineIndexes(db.getLineIndexes());
                        newBlock.getFiles().add(f1);
                        newBlock.getFiles().add(f2);

                        String pairKey1 = f1.getFile().getPath() + "::" + f2.getFile().getPath();
                        String pairKey2 = f2.getFile().getPath() + "::" + f1.getFile().getPath();

                        if (!(filePairMap.containsKey(pairKey1) || filePairMap.containsKey(pairKey2))) {
                            filePairMap.put(pairKey1, new ImmutablePair(f1, f2));
                        }
                    });
                });
            }
        });
        resetProgressValues(0);
    }