Quello che vuoi veramente fare è vedere se c'è un codice clonato (copiato) tra i due progetti (entrambi i progetti consistono in possibilmente grandi set di file). È possibile farlo eseguendo uno strumento di rilevamento dei cloni. Wikipedia ne elenca una varietà.
Per decidere grossolanamente se ci sono molte copie, devi solo abbinare le linee di origine e ci sono una varietà di rilevatori di cloni della linea di origine esatti là fuori. Credo che PMD sia uno di questi. Ciò che questi non faranno è trovare il codice che è stato modificato in copia-incolla; troveranno il codice invariato copia-incolla di boilerplate probabilmente racchiuso tra le cose modificate in copia.
Se si desidera visualizzare i dettagli della copia per il codice copia-modifica-modifica, è necessario un rilevatore di cloni che trova cloni "parametrizzati". I rilevatori basati su token lo fanno per le modifiche che sostituiscono solo i nomi delle variabili o le costanti.
I rilevatori basati su albero di sintassi astratta (AST) lo fanno per le modifiche che coinvolgono blocchi più grandi, come espressioni, dichiarazioni, inserzioni, eliminazioni, ecc. Questi ultimi tendono a dare risposte migliori, perché a differenza dei rilevatori di token, possono utilizzare la struttura linguistica del codice sorgente del computer come guida.
Il nostro strumento CloneDR è un tale rivelatore.
Non conosco strumenti che troveranno effettivamente un codice "equivalente" (condizionali invertiti), ecc. I ricercatori hanno costruito rivelatori di cloni che fanno qualcosa del genere, ma la combinatoria rende l'esecuzione molto costosa e i prototipi di ricerca si ridimensionano male.