Ce que vous voulez vraiment faire, c'est voir s'il y a du code cloné (copié) dans les deux projets (les deux projets consistant éventuellement en de grands ensembles de fichiers). Vous pouvez le faire en exécutant un outil de détection de clone. Wikipedia en répertorie une variété.
Pour décider grossièrement s'il y a beaucoup de copie, il vous suffit de faire correspondre les lignes source et il existe une variété de détecteurs de clones de ligne source identiques. Je pense que PMD est l'un d'entre eux. Ce qu'ils ne feront pas, c'est de trouver du code copié-collé-édité; ils trouveront un code standard inchangé, copié-collé, probablement enroulé autour du contenu édité copié-copié.
Si vous voulez voir les détails de la copie pour le code copier-coller-éditer, vous avez besoin d'un détecteur de clone qui trouve des clones "paramétrés". Les détecteurs à base de jetons font cela pour les éditions qui ne remplacent que les noms de variables ou les constantes.
Les détecteurs basés sur l’arbre de syntaxe abstraite (AST) effectuent cette opération pour les éditions impliquant des fragments plus volumineux, tels que des expressions, des instructions, des insertions, des suppressions, etc. Ces derniers ont tendance à donner de meilleures réponses car, contrairement aux détecteurs de jetons, ils peuvent utiliser la structure linguistique du code source de l'ordinateur comme guide.
Notre outil CloneDR est un tel détecteur.
Je ne connais pas d'outils qui trouveront un code "équivalent" (conditionnels inversés), etc. Les chercheurs ont construit des détecteurs de clones qui font ce genre de choses, mais la combinatoire rend cette exécution très coûteuse et les prototypes de recherche mal dimensionnés.