Skip to content

Add a graph-based Java module with syntax normalization and dead code detection.#2766

Open
LundiNord wants to merge 185 commits intojplag:feature/java-cpgfrom
LundiNord:main
Open

Add a graph-based Java module with syntax normalization and dead code detection.#2766
LundiNord wants to merge 185 commits intojplag:feature/java-cpgfrom
LundiNord:main

Conversation

@LundiNord
Copy link
Copy Markdown

@LundiNord LundiNord commented Dec 24, 2025

This PR builds upon #2767.

This PR adds abstract interpretation on Java source code to the java-cpg language module.
This is used to detect dead code that is hard/impossible to detect using static analysis. The dead code is removed from the tokens to prevent attacks where dead code is inserted to mask plagiarism.

@robinmaisch robinmaisch changed the base branch from develop to feature/java-cpg March 5, 2026 14:27
@robinmaisch
Copy link
Copy Markdown
Member

We aim to merge this into the feature/java-cpg branch. @LundiNord, please merge the current branch state into your branch, and also, please remove the "leon" directory.

# Conflicts:
#	.gitignore
#	cli/src/test/java/de/jplag/cli/LanguageTest.java
#	languages/java-cpg/pom.xml
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/CpgAdapter.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/JavaCpgLanguage.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/passes/DfgSortPass.kt
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/passes/JTokenizationPass.java.txt
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/token/ACpgNodeListener.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/token/CpgNodeListener.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/GraphTransformation.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/TransformationRepository.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/CpgIsomorphismDetector.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/PatternRepository.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/edges/AnyOfNEdge.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/edges/Edges.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/pattern/GraphPatternImpl.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/pattern/Match.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/pattern/PatternUtil.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/matching/pattern/SimpleGraphPattern.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/operations/DummyNeighbor.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/transformation/operations/TransformationUtil.java
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/visitor/NodeOrderStrategy.java
#	languages/java-cpg/src/test/java/de/jplag/java_cpg/CreateTransformTest.java
#	report-viewer/package-lock.json
# Conflicts:
#	languages/java-cpg/src/main/java/de/jplag/java_cpg/ai/AbstractInterpretation.java
#	languages/java-cpg/src/test/java/de/jplag/java_cpg/ai/DeadCodeDetectionStringTest.java
#	languages/java-cpg/src/test/java/de/jplag/java_cpg/transform/PlagiarismDetectionTest.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00089_00003/OpticaMinimalista.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00090_00001/Optica.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00090_00002/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00097_00001/OpticaMinimalista.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00098_00003/optica.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00099_00001/F2.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/ACCEPTED/00101_00001/Minimalista.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/WRONG_ANSWER/00089_00002/OpticaMinimalista.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/WRONG_ANSWER/00098_00001/optica.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000018/WRONG_ANSWER/00098_00002/optica.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/ACCEPTED/00129_00008/sociologia.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/ACCEPTED/00160_00001/JavaApplication7.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/ACCEPTED/00196_00001/sociologia.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/WRONG_ANSWER/00109_00001/Grupos.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/WRONG_ANSWER/00183_00002/Sociologia.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000019/WRONG_ANSWER/00189_00001/sociologia_m.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00045_00003/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00159_00003/Graph.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00160_00011/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00170_00004/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00171_00006/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00173_00001/Encomenda1.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00173_00002/Encomenda2.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00174_00001/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00174_00005/encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00175_00003/a.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/ACCEPTED/00175_00006/encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00069_00004/encomenda_m.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00069_00006/encomenda_m.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00160_00010/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00170_00002/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00171_00003/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00171_00004/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00171_00005/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000021/WRONG_ANSWER/00174_00004/encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00078_00001/Graph.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00080_00001/Encomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00087_00001/emcomenda.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00089_00001/main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00090_00001/Infra.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/ACCEPTED/00090_00002/Main.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000022/WRONG_ANSWER/00096_00001/infraestrutura.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00041_00001/botemmel.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00042_00001/NegocioElectronico.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00042_00002/NegocioElectronico.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00114_00001/Negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00114_00002/Negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00115_00006/Negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00118_00001/NegocioEletronico.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00118_00002/NegocioEletronico.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00120_00003/neg.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/ACCEPTED/00122_00005/negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00038_00001/negocio_eletronico_m.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00038_00002/negocio_eletronico_m.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00059_00001/electronicbusiness.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00059_00002/electronicbusiness.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00115_00004/Negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00115_00005/Negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00120_00001/neg.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00120_00002/neg.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00122_00001/negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00122_00002/negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00122_00003/negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000023/WRONG_ANSWER/00122_00004/negocio.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000035/ACCEPTED/00031_00002/Merge.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000035/WRONG_ANSWER/00061_00001/Inversoes.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000035/WRONG_ANSWER/00061_00002/Inversoes.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000039/ACCEPTED/00071_00001/somasmaisproximas07.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000042/ACCEPTED/00054_00005/CoberturaMinima.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000042/WRONG_ANSWER/00054_00003/CoberturaMinima.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000045/WRONG_ANSWER/00172_00003/piramides.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000048/ACCEPTED/00042_00003/testGraph.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000048/ACCEPTED/00044_00001/Prob16.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000048/ACCEPTED/00085_00001/redeeconomica.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000053/ACCEPTED/00051_00002/BFS.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000053/ACCEPTED/00084_00003/BFS.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/ACCEPTED/00020_00005/SardasKrustall.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00007_00002/Freckles.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00008_00010/Prob21_v7.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00008_00011/Prob21_v7.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00008_00013/Prog21.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00048_00001/Prim.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00048_00002/Prim.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00048_00003/Prim.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00048_00004/Prim.java
#	languages/java-cpg/src/test/resources/java/progpedia/00000056/WRONG_ANSWER/00048_00005/Prim.java
#	report-viewer/package-lock.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants