Что вы действительно хотите сделать, так это посмотреть, есть ли код, клонированный (скопированный) между двумя проектами (оба проекта, состоящие из, возможно, больших наборов файлов). Вы можете сделать это, запустив инструмент обнаружения клонов. В Википедии перечислено множество их.
Чтобы решить, достаточно ли много копий, вам нужно только сопоставить исходные строки, и есть множество точных детекторов клонов исходных строк. Я считаю, что PMD является одним из них. Чего они не будут делать, так это найти код, который отредактирован копированием-вставкой; они найдут стандартный код «копировать-вставить-неизмененный», вероятно, обернутый вокруг материала, отредактированного после копирования.
Если вы хотите увидеть подробности копирования для кода копирования-редактирования, вам нужен детектор клонов, который находит «параметризованные» клоны. Детекторы на основе токенов делают это для правок, которые заменяют только имена переменных или константы.
Детекторы на основе абстрактно-синтаксического дерева (AST) делают это для правок, включающих более крупные фрагменты, такие как выражения, операторы, вставки, удаления и так далее. Последние, как правило, дают лучшие ответы, потому что, в отличие от детекторов токенов, они могут использовать структуру языка исходного кода компьютера в качестве руководства.
Наш инструмент CloneDR является таким детектором.
Я не знаю инструментов, которые действительно находят «эквивалентный» код (обратные условия) и т. Д. Исследователи создали детекторы клонов, которые делают что-то подобное, но комбинаторика делает это очень дорогим для выполнения, а исследовательские прототипы плохо масштабируются.