Compilation of Commit Changes within Java Source Code Repositories
<|reference_start|>Compilation of Commit Changes within Java Source Code Repositories: Java applications include third-party dependencies as bytecode. To keep these applications secure, researchers have proposed tools to re-identify dependencies that contain known vulnerabilities. Yet, to allow such re-identification, one must obtain, for each vulnerability patch, the bytecode fixing the respective vulnerability at first. Such patches for dependencies are curated in databases in the form of fix-commits. But fixcommits are in source code, and automatically compiling whole Java projects to bytecode is notoriously hard, particularly for non-current versions of the code. In this paper, we thus propose JESS, an approach that largely avoids this problem by compiling solely the relevant code that was modified within a given commit. JESS reduces the code, retaining only those parts that the committed change references. To avoid name-resolution errors, JESS automatically infers stubs for references to entities that are unavailable to the compiler. A challenge is here that, to facilitate the above mentioned reidentification, JESS must seek to produce bytecode that is almost identical to the bytecode which one would obtain by a successful compilation of the full project. An evaluation on 347 GitHub projects shows that JESS is able to compile, in isolation, 72% of methods and constructors, of which 89% have bytecode equal to the original one. Furthermore, on the Project KB database of fix-commits, in which only 8% of files modified within the commits can be compiled with the provided build scripts, JESS is able to compile 73% of all files that these commits modify.<|reference_end|>
@article{schott2024compilation,
    title={Compilation of Commit Changes within Java Source Code Repositories},
    author={Stefan Schott, Wolfram Fischer, Serena Elisa Ponta, Jonas Klauke, Eric
  Bodden},
    journal={arXiv preprint arXiv:2407.17853},
    year={2024},
    archivePrefix={arXiv},
    eprint={2407.17853},
    primaryClass={cs.SE cs.PL}
}