1. A computer-implemented method comprising: receiving a first full set of analysis artifacts representing properties of source code files compiled during a full build of a first snapshot of a project; receiving data representing a full build graph, the full build graph representing relationships between the source code files compiled during the full build of a first snapshot of a project and the first full set of analysis artifacts; receiving an incremental set of analysis artifacts representing properties of source code files compiled during an incremental build of a second, subsequent snapshot of the project; receiving data representing an incremental build graph, the incremental build graph representing relationships between the source code files compiled during the incremental build of the second snapshot of the project and the incremental set of analysis artifacts; generating an initial keep graph that is initially equivalent to the full build graph; removing, from the initial keep graph, any nodes representing source code files or analysis artifacts that also occur in the incremental build graph; deleting, from the first full set of analysis artifacts, analysis artifacts for source code files represented by nodes that occur in the full build graph but that do not occur in the keep graph; and copying the analysis artifacts represented by nodes in the incremental build graph into the first full set of analysis artifacts to generate a second full set of analysis artifacts for the project.