1. A computer-implemented method comprising: receiving data representing a dependency graph of a project, wherein the dependency graph has nodes representing a plurality of software elements, including a first software element that includes a usage of a template parameterized by a type, a second software element that is or occurs within a definition of the template, and a third software element that defines the type used as the template parameter in the usage of the template, wherein the first software element, the second software element, and the third software element are distinct from each other, wherein the dependency graph has edges representing dependencies between pairs of nodes, each edge between a pair of nodes representing a dependency of a first node of the pair on a second node of the pair, and wherein the dependency graph includes nodes that correspond to software elements represented in a hierarchy of software elements; determining that the dependencies include a first dependency of a first node representing the first software element on a second node representing the second software element, and a second dependency of the second node representing second software element on a third node representing the third software element; and in response, modifying the dependency graph including: generating a new node in the dependency graph, the new node representing an instantiation of the template with the type, wherein the new node does not correspond to a software element represented in the hierarchy of software elements, adding a new first dependency from the first node to the new node, and adding a new second dependency from the new node to the third node.