IP Library Granted Patent US 12705035
Granted Patent B2
US 12705035 · App. 18/642,997 · Granted Aug 11, 2026

Program dependent component amalgamation

Inventors: Tom Hvitved (Copenhagen, DK); Christopher Stephen Frederick Smowton (Oxford, GB); Tamás Vajk (Visp, CH); Arthur Iwan Baars (Valencia, ES); Michael Nebel (Vanløse, DK)
Assignee: Microsoft Technology Licensing, LLC
G06F8/433
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 12705035
App. No.
18/642,997
Granted
Aug 11, 2026
Kind
B2
Abstract

Some embodiments construct a set of build dependencies for a program without access to a full set of build instructions. When multiple clashing name resolutions are identified for a particular dependency, a union of the alternative versions is formed. Intermediate representations of the union of program versions, such as symbol tables, abstract syntax trees, and other internal compiler data structures, are emitted to persistent non-volatile storage, instead of using a single resolution to create temporary intermediate data to build an executable program. Security analysis and licensing analysis utilize the persisted program representations to analyze the union of multiple overlapping but different versions of the program.

Claims (47)

1 . A method of build dependency amalgamation, the method performed by a computing system, the method comprising:

ascertaining that each of at least two name resolutions identifies a different respective item to satisfy a build dependency of a program;

forming, by the computing system, a union which specifies the at least two name resolutions;

supplying the union to a tool which is configured to conduct an analysis of the program; and

obtaining a result of the analysis while avoiding building a full program executable, the result computed from at least the union.

2 . The method of claim 1 , further comprising at least one of:

getting at least one of the name resolutions from a trace of an attempt to build the program; or

getting at least one of the name resolutions without completing a build of the program.

3 . The method of claim 1 , further comprising acquiring a source code stub which represents the build dependency, and submitting the source code stub to the tool.

4 . The method of claim 1 , wherein the method further comprises assigning, to at least one name resolution, a rank which is computed based at least on an extent to which the respective item provides at least one of:

a definition of a symbol which is not defined in a portion of a source code of the program;

a symbol data type which is consistent with a use of the symbol in a portion of a source code of the program; or

a routine signature which is consistent with a use of the routine in a portion of a source code of the program.

5 . The method of claim 1 , wherein the method further comprises responding to a compilation error which is a result of an attempt to build the program, and wherein responding comprises at least one of:

searching a version space; or

constructing an index from available object methods and fields onto version numbers.

6 . The method of claim 1 , wherein the method further comprises at least one of:

utilizing an index from available object methods and fields onto version numbers;

establishing a file-to-file dependency graph;

indexing classes, object methods, and fields which are defined by different dependency files to check for a clash;

gathering hints from a build system as to candidate orders of clashing dependencies, and assembling a consensus order; or

reacting to a type mismatch or a method mismatch by determining a plurality of candidate dependency orderings and assessing different candidate dependency orderings.

7 . A computing system, comprising:

at least one digital memory;

at least one processor in operable communication with the at least one digital memory, the at least one processor configured to perform a build dependency amalgamation method which comprises (a) ascertaining that each of at least two name resolutions in a non-empty set of name resolutions identifies a different respective item to satisfy a build dependency of a program, (b) forming a union which specifies the at least two name resolutions, (c) supplying the union to a tool which is configured to conduct an analysis of the program, and (d) receiving a result of the analysis while avoiding building a full program executable, the result computed from at least the union.

8 . The computing system of claim 7 , wherein the set of name resolutions comprises at respective identifications of two different versions of a program component that each satisfy the build dependency.

9 . The computing system of claim 7 , wherein the set of name resolutions comprises respective identifications of two different versions of a source code which is specified in the build dependency.

10 . The computing system of claim 7 , wherein the set of name resolutions comprises identifications of two different fully-qualified names which identify respective alternatives for a program component of the program.

11 . The computing system of claim 7 , wherein the set of name resolutions comprises identifications of two items which reside in different respective sub-projects.

12 . The computing system of claim 7 , wherein the set of name resolutions comprises a first definition of a fully-qualified name in a dependency of the program and a second definition of the fully-qualified name in a source code of the program.

13 . The computing system of claim 7 , further comprising a database wherein at least two entities with the same fully-qualified name are collapsed.

14 . The computing system of claim 7 , wherein the tool comprises a security analysis tool.

15 . The computing system of claim 7 , wherein the tool comprises a licensing analysis tool.

16 . A computer-readable storage medium configured storing instructions which upon execution by a processor cause a computing system to perform a build dependency amalgamation method, the method comprising:

ascertaining that each of at least two name resolutions identifies a different respective item to satisfy a build dependency of a program;

forming a union which specifies the at least two name resolutions;

supplying the union to a tool which is configured to conduct an analysis of the program; and

conducting the analysis and obtaining an analysis result while avoiding building a full program executable, the analysis result computed from at least the union.

17 . The computer-readable storage medium of claim 16 , wherein the method further comprises ranking different name resolutions based on the extent to which they yield a program component which provides at least one of:

a definition of a symbol which is not defined in a portion of a source code of the program;

a symbol data type which is consistent with a use of the symbol in a portion of a source code of the program; or

a routine signature which is consistent with a use of the routine in a portion of a source code of the program.

18 . The computer-readable storage medium of claim 16 , wherein conducting the analysis comprises at least one of:

binding a name computed according to at least the union; or

inferring a data type according to at least the union.

19 . The computer-readable storage medium of claim 16 , wherein the method avoids generating executable code for any of the items which are identified in the name resolutions which are specified by the union.

20 . The computer-readable storage medium of claim 16 , wherein the method comprises getting at least one of the name resolutions from a trace of an attempt to build the program.