IP Library Granted Patent US 9,372,670
Granted Patent B1
US 9,372,670 · App. 14/871,813 · Granted Jun 21, 2016

Template dependency relocation

Inventors: Luke James Cartey (Oxford, GB); Joshua George Hale (Oxford, GB); Geoffrey White (Oxford, GB)
G06F8/22G06F11/3604
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,372,670
App. No.
14/871,813
Granted
Jun 21, 2016
Kind
B1
Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for relocating template dependencies. One of the methods includes determining that dependencies in a dependency graph include a first dependency of a first node representing the first software element that includes a usage of a template parameterized by a type on a second node representing a second software element that is or occurs within a definition of the template, and a second dependency of the second node representing second software element on a third node representing the third software element that defines the type. In response, the dependency graph is modified including generating a new node in the dependency graph, the new node representing the instantiation of the template with the type, 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.

Claims (70)

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.

2. The method of claim 1 , further comprising removing the second dependency from the dependency graph.

3. The method of claim 1 , wherein generating the new node in the dependency graph comprises:

generating a new node in the dependency graph that represents all instantiations of the template with the type in the project.

4. The method of claim 1 , wherein the hierarchy of software elements includes nodes that represent respective file system constructs.

5. The method of claim 1 , wherein modifying the dependency graph further comprises:

updating a graphical representation of dependencies between software elements in the project to reflect (i) the new node, (ii) the first dependency from the first node to the new node, and (iii) the second dependency from the new node to the third node.

6. The method of claim 1 , wherein modifying the dependency graph further comprises:

removing the second dependency from the dependency graph; and

updating a graphical representation of dependencies between software elements in the project to reflect removal of the second dependency of the second node representing the second software element on the third node representing the third software element.

7. The method of claim 1 , comprising:

generating a graphical representation of the dependency graph.

8. The method of claim 1 , wherein the template is a software element that is parameterized by type at compile-time.

9. The method of claim 1 , wherein a target of the second dependency is referenced as a parameter of a variable declaration using the template in the first software element.

10. The method of claim 1 , wherein the third software element is not referenced in the definition of the template in the second software element.

11. A system comprising:

one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations 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.

12. The system of claim 11 , wherein the operations further comprise removing the second dependency from the dependency graph.

13. The system of claim 11 , wherein generating the new node in the dependency graph comprises:

generating a new node in the dependency graph that represents all instantiations of the template with the type in the project.

14. The system of claim 11 , wherein the hierarchy of software elements includes nodes that represent respective file system constructs.

15. The system of claim 11 , wherein modifying the dependency graph further comprises:

updating a graphical representation of dependencies between software elements in the project to reflect (i) the new node, (ii) the first dependency from the first node to the new node, and (iii) the second dependency from the new node to the third node.

16. The system of claim 11 , wherein modifying the dependency graph further comprises:

removing the second dependency from the dependency graph; and

updating a graphical representation of dependencies between software elements in the project to reflect removal of the second dependency of the second node representing second software element on the third node representing the third software element.

17. The system of claim 11 , wherein the operations further comprise:

generating a graphical representation of the dependency graph.

18. The system of claim 11 , wherein the template is a software element that is parameterized by type at compile-time.

19. The system of claim 11 , wherein a target of the second dependency is referenced as a parameter of a variable declaration using the template in the first software element.

20. The system of claim 11 , wherein the third software element is not referenced in the definition of the template in the second software element.

21. A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations 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.

22. The computer program product of claim 21 , wherein the operations further comprise removing the second dependency from the dependency graph.

23. The computer program product of claim 21 , wherein generating the new node in the dependency graph comprises:

generating a new node in the dependency graph that represents all instantiations of the template with the type in the project.

24. The computer program product of claim 21 , wherein the hierarchy of software elements includes nodes that represent respective file system constructs.

25. The computer program product of claim 21 , wherein modifying the dependency graph further comprises:

updating a graphical representation of dependencies between software elements in the project to reflect (i) the new node, (ii) the first dependency from the first node to the new node, and (iii) the second dependency from the new node to the third node.

26. The computer program product of claim 24 , wherein modifying the dependency graph further comprises:

removing the second dependency from the dependency graph; and

updating a graphical representation to of dependencies between software elements in the project reflect removal of the second dependency of the second node representing second software element on the third node representing the third software element.

27. The computer program product of claim 21 , wherein the operations further comprise:

generating a graphical representation of the dependency graph.

28. The computer program product of claim 21 , wherein the template is a software element that is parameterized by type at compile-time.

29. The computer program product of claim 21 , wherein a target of the second dependency is referenced as a parameter of a variable declaration using the template in the first software element.

30. The computer program product of claim 21 , wherein the third software element is not referenced in the definition of the template in the second software element.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 27, 2020
From: GITHUB SOFTWARE UK LTD.
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 051710/0252 →
CHANGE OF NAME Recorded Dec 10, 2019
From: SEMMLE LIMITED
To: GITHUB SOFTWARE UK LTD.
Reel/Frame 051244/0305 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 29, 2015
From: CARTEY, LUKE JAMES; HALE, JOSHUA GEORGE; WHITE, GEOFFREY
To: SEMMLE LIMITED
Reel/Frame 036913/0399 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 28, 2015
From: HALE, JOSHUA GEORGE
To: SEMMLE LIMITED
Reel/Frame 036906/0610 →
Continuity (1)
Provisional Application 62234939 · Sep 30, 2015