IP Library Granted Patent US 12,705,161
Granted Patent B2
US 12,705,161 · App. 19/316,759 · Granted Aug 11, 2026

Determining an impact of changes to third-party software components on downstream users

Inventors: Henrik Plate (Valbonne, FR); Dimitrios Styliadis (San Jose, CA); Georgios Gousios (Delft, NL); Joseph Hejderup (Palo Alto, CA); Philip Hamer (Palo Alto, CA)
Assignee: Endor Labs Inc
G06F11/3604G06F11/3636
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 12,705,161
App. No.
19/316,759
Filed
Sep 2, 2025
Granted
Aug 11, 2026
Kind
B2
Art Unit
2192
USPC
717/126
Abstract

In some cases, a server determines that project code calls a component in a third-party library that has been updated. The server compares a first type hierarchy of the component with a second type hierarchy of the updated component, a first call graph of the component with a second call graph of the updated component, a first set of functions called by the component with a second set of functions called by the updated component, and a first set of fields (directly and transitively) accessed by the component with a second set of fields accessed by the updated component. The server determines, based on the comparisons, a set of breaking changes associated with the updated component. Each breaking change identifying changes to the updated component that may cause an incompatibility. The project code is modified to create modified project code that does not include a breaking change.

Claims (143)

1 . A method comprising:

determining, by one or more processors, that project code in a development system calls a component in a third-party library, wherein the component is in a compiled form;

determining, by the one or more processors, that the component has been updated to create an updated component in the third-party library, wherein the updated component is in the compiled form;

performing, by the one or more processors, a type hierarchy comparison of:

a first type hierarchy associated with the component; and

a second type hierarchy associated with the updated component;

performing, by the one or more processors, a call graph comparison of:

a first call graph associated with the component; and

a second call graph associated with the updated component;

performing, by the one or more processors, a function comparison of:

a first set of functions called by the component; and

a second set of functions called by the updated component,

wherein the first set of functions and the second set of functions include directly called functions and transitively called functions;

performing, by the one or more processors, a field comparison of:

a first set of fields accessed by the component; and

a second set of fields accessed by the updated component,

wherein the first set of fields and the second set of fields include directly accessed fields and transitively accessed fields; and

determining, by the one or more processors and based at least in part on:

the type hierarchy comparison,

the call graph comparison,

the function comparison, and

the field comparison,

a set of breaking changes associated with the updated component, each breaking change in the set of breaking changes identifying changes to the updated component, relative to the component, that are determined to cause an incompatibility when the project code calls the updated component;

wherein the project code is modified to create modified project code that does not include a breaking change from the set of breaking changes.

2 . The method of claim 1 , further comprising:

determining a source compatibility between the component and the updated component;

determining a binary compatibility between the component and the updated component;

determining a behavioral compatibility between the component and the updated component; or

any combination thereof.

3 . The method of claim 2 , further comprising:

determining the source compatibility using a compiler;

determining the binary compatibility using a virtual machine;

determining the behavioral compatibility at runtime by determining whether the updated component exhibits a behavior that is different from a previous behavior of a previous version of the updated component without causing compilation or linkage errors; or

any combination thereof.

4 . The method of claim 1 , wherein performing the type hierarchy comparison comprises:

traversing the first type hierarchy;

traversing the second type hierarchy; and

identifying, based on traversing the first type hierarchy and the second type hierarchy, one or more types that inherit or implement at least one type that changed from the component to the updated component.

5 . The method of claim 1 , wherein performing the call graph comparison comprises:

traversing the first call graph;

traversing the second call graph; and

identifying, based on traversing the first call graph and the second call graph, at least one function, included in the updated component, that changed from the component to the updated component.

6 . The method of claim 1 , wherein performing the call graph comparison comprises:

traversing the first call graph;

traversing the second call graph; and

identifying at least one function, called by the updated component, that changed from the component to the updated component.

7 . The method of claim 1 , wherein performing the call graph comparison comprises:

traversing the first call graph;

traversing the second call graph; and

identifying at least one field, accessed by the updated component, that changed from the component to the updated component.

8 . A server comprising:

one or more processors; and

one or more non-transitory computer readable media storing instructions executable by the one or more processors to perform operations comprising:

determining that project code in a development system calls a component in a third-party library, wherein the component is in a compiled form;

determining that the component has been updated to create an updated component in the third-party library, wherein the updated component is in the compiled form;

performing a type hierarchy comparison of:

a first type hierarchy associated with the component; and

a second type hierarchy associated with the updated component;

performing a call graph comparison of:

a first call graph associated with the component; and

a second call graph associated with the updated component;

performing a function comparison of:

a first set of functions called by the component; and

a second set of functions called by the updated component,

wherein the first set of functions and the second set of functions include directly called functions and transitively called functions;

performing a field comparison of:

a first set of fields accessed by the component; and

a second set of fields accessed by the updated component,

wherein the first set of fields and the second set of fields include directly accessed fields and transitively accessed fields; and

determining, based at least in part on:

the type hierarchy comparison,

the call graph comparison,

the function comparison, and

the field comparison,

a set of breaking changes associated with the updated component, each breaking change in the set of breaking changes identifying changes to the updated component, relative to the component, that are determined to cause an incompatibility when the project code calls the updated component;

wherein the project code is modified to create modified project code that does not include a breaking change from the set of breaking changes.

9 . The server of claim 8 , wherein performing the call graph comparison comprises:

comparing a package call graph of the component and the updated component;

comparing a global call graph of the component and the updated component; or

any combination thereof.

10 . The server of claim 8 , wherein the incompatibility comprises:

a source code incompatibility;

a binary incompatibility;

a behavioral incompatibility; or

any combination thereof.

11 . The server of claim 8 , wherein the project code comprises:

a plurality of types that are explicitly defined and implicitly inherited; and

a plurality of relationships that are explicitly defined and implicitly inherited.

12 . The server of claim 8 , wherein performing the field comparison comprises:

determining changes, between the component and the updated component, to particular fields accessible to the updated component; and

determining whether the changes to the fields are linked to particular fields in the project or in project dependencies.

13 . The server of claim 8 , further comprising:

determining a set of reachable types in the updated component;

performing a comparison of changes in the updated component relative to the component; and

determining, based on the comparison, whether new types or changed types in the set of reachable types are compatible with external types associated with the updated component.

14 . The server of claim 8 , the operations further comprising:

for each breaking change in the set of breaking changes:

determining one or more locations in the project code affected by the incompatibility; and

determining one or more actions to perform to address the incompatibility.

15 . One or more non-transitory computer readable media storing instructions executable by one or more processors to perform operations comprising:

determining that project code in a development system calls a component in a third-party library, wherein the component is in a compiled form;

determining that the component has been updated to create an updated component in the third-party library, wherein the updated component is in the compiled form;

performing a type hierarchy comparison of:

a first type hierarchy associated with the component; and

a second type hierarchy associated with the updated component;

performing a call graph comparison of:

a first call graph associated with the component; and

a second call graph associated with the updated component;

performing a function comparison of:

a first set of functions called by the component; and

a second set of functions called by the updated component,

wherein the first set of functions and the second set of functions include directly called functions and transitively called functions;

performing a field comparison of:

a first set of fields accessed by the component; and

a second set of fields accessed by the updated component,

wherein the first set of fields and the second set of fields include directly accessed fields and transitively accessed fields; and

determining, based at least in part on:

the type hierarchy comparison,

the call graph comparison,

the function comparison, and

the field comparison,

a set of breaking changes associated with the updated component, each breaking change in the set of breaking changes identifying changes to the updated component, relative to the component, that are determined to cause an incompatibility when the project code calls the updated component;

wherein the project code is modified to create modified project code that does not include a breaking change from the set of breaking changes.

16 . The one or more non-transitory computer readable media of claim 15 , wherein the incompatibility comprises:

an incoming incompatibility due to an incoming call;

an outgoing incompatibility due to an outgoing call; or

both.

17 . The one or more non-transitory computer readable media of claim 15 , wherein performing the type hierarchy comparison comprises:

traversing the first type hierarchy;

traversing the second type hierarchy; and

identifying, based on traversing the first type hierarchy and the second type hierarchy, one or more types that inherit or implement at least one type that changed from the component to the updated component.

18 . The one or more non-transitory computer readable media of claim 15 , wherein performing the call graph comparison comprises:

traversing the first call graph;

traversing the second call graph; and

identifying, based on traversing the first call graph and the second call graph, at least one function, included in the updated component, that changed from the component to the updated component.

19 . The one or more non-transitory computer readable media of claim 15 , further comprising:

determining a set of reachable types in the updated component;

performing a comparison of changes in the updated component relative to the component; and

determining, based on the comparison of the changes, whether new types or changed types in the set of reachable types are compatible with external types associated with the updated component.

20 . The one or more non-transitory computer readable media of claim 15 , the operations further comprising:

for each breaking change in the set of breaking changes:

determining one or more locations in the project code affected by the incompatibility; and

determining one or more actions to perform to address the incompatibility.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 6, 2025
From: PLATE, HENRIK; STYLIADIS, DIMITRIOS; GOUSIOS, GEORGIOS; HEJDERUP, JOSEPH; HAMER, PHILIP
To: ENDOR LABS INC
Reel/Frame 073133/0028 →
Continuity (9)
Continuation 18599620 · Mar 8, 2024
Provisional Application 63552793 · Feb 13, 2024
Provisional Application 63627281 · Jan 31, 2024
Provisional Application 63472557 · Jun 12, 2023
Provisional Application 63472562 · Jun 12, 2023
Provisional Application 63472559 · Jun 12, 2023
Provisional Application 63472561 · Jun 12, 2023
Provisional Application 63472564 · Jun 12, 2023
Related Publication 20260003765A1 · Jan 1, 2026
References Cited (66)
US 8433687B1 · Pydi · 2013 [cited by applicant]
US 8627327B2 · Dunshea et al. · 2014 [cited by applicant]
US 9064134B1 · Agarwal · 2015 [cited by applicant]
US 10108975B1 · Benner et al. · 2018 [cited by applicant]
US 10379995B1 · Walters · 2019 [cited by examiner]
US 10754643B2 · Arquero · 2020 [cited by examiner]
US 11204690B1 · Hoberman et al. · 2021 [cited by applicant]
US 11544050B1 · Ankit et al. · 2023 [cited by applicant]
US 11586436B1 · Jennings · 2023 [cited by applicant]
US 11704099B1 · Morse et al. · 2023 [cited by applicant]
US 11930013B1 · Zhang et al. · 2024 [cited by applicant]
US 20020097253A1 · Charisius et al. · 2002 [cited by applicant]
US 20040168152A1 · Kramer · 2004 [cited by applicant]
US 20050055565A1 · Fournet et al. · 2005 [cited by applicant]
US 20060288055A1 · Johnson et al. · 2006 [cited by applicant]
US 20070294667A1 · Caceres et al. · 2007 [cited by applicant]
US 20100153908A1 · Sarkar · 2010 [cited by examiner]
US 20110055153A1 · Hashimoto et al. · 2011 [cited by applicant]
US 20110078674A1 · Ershov · 2011 [cited by examiner]
US 20130083030A1 · Fukuda et al. · 2013 [cited by applicant]
US 20140013315A1 · Genevski et al. · 2014 [cited by applicant]
US 20140173574A1 · Schmidt et al. · 2014 [cited by applicant]
US 20140201573A1 · Huang et al. · 2014 [cited by applicant]
US 20140289697A1 · Wenda et al. · 2014 [cited by applicant]
US 20150169320A1 · Ahmed · 2015 [cited by examiner]
US 20160253625A1 · Casey · 2016 [cited by applicant]
US 20160259636A1 · Plate et al. · 2016 [cited by applicant]
US 20170206123A1 · Kirkpatrick · 2017 [cited by applicant]
US 20170286099A1 · Wilkinson · 2017 [cited by applicant]
US 20180018459A1 · Zhang et al. · 2018 [cited by applicant]
US 20180239898A1 · Haerterich et al. · 2018 [cited by applicant]
US 20180314622A1 · Lowe · 2018 [cited by examiner]
US 20190042233A1 · Majumdar et al. · 2019 [cited by applicant]
US 20190272378A1 · Hirvimies et al. · 2019 [cited by applicant]
US 20190278572A1 · Yoshida et al. · 2019 [cited by applicant]
US 20200053175A1 · Bodman et al. · 2020 [cited by applicant]
US 20200073781A1 · Falko · 2020 [cited by applicant]
US 20200218535A1 · Alomari · 2020 [cited by applicant]
US 20210149667A1 · Watson et al. · 2021 [cited by applicant]
US 20210173621A1 · Fender et al. · 2021 [cited by applicant]
US 20210182037A1 · Hu · 2021 [cited by applicant]
US 20210182391A1 · Plate · 2021 [cited by applicant]
US 20210281597A1 · Guiroux et al. · 2021 [cited by applicant]
US 20220091842A1 · Murray · 2022 [cited by applicant]
US 20220342680A1 · Darke · 2022 [cited by examiner]
CN 112083945A · 2020 [cited by applicant]
CN 116842522A · 2023 [cited by applicant]
CN 117556432A · 2024 [cited by applicant]
CN 118467790A · 2024 [cited by applicant]
JP 2011053966A · 2011 [cited by applicant]
Kamil Jezek et al., “API Evolution and Compatibility: A Data Corpus and Tool Evaluation,” 2017 [retrieved Nov. 26, 2025], Journal of Object Technology, vol. 16, No. 4, pp. 1-23, downloaded from <url>:https://www.jot.fm/… [cited by examiner]
Danilo Silva et al., “RefDiff 2.0: A Multi-Language Refactoring Detection Tool,” 2021 [retrieved Jun. 23, 2025], IEEE Transactions on Software Engineering, vol. 47, Issue 12, pp. 2786-2802, downloaded from <url>:https:/… [cited by examiner]
Chaitanya Singh, “Multilevel inheritance in java with example,” 2022 [retrieved Nov. 24, 2025], pp. 1-3, downloaded from the Wayback Machine at <url>:https://web.archive.org/web/20220424092806/https://beginnersbook.com/… [cited by examiner]
Oracle, “The Java Tutorials: Inheritance,” 2020 [retrieved Nov. 25, 2025], pp. 1-4, downloaded from the Wayback Machine at <url>:https: //web.archive.org/web/20200428224332/https://docs.oracle.com/javase/tutorial/java/l… [cited by examiner]
Barthelemy Dagenais et al., SemDiff: Analysis and Recommendation Support for API Evolution, 2009 [retrieved Jun. 26, 2025], 2009 IEEE 31st International Conference on Software Engineering, pp. 599-602, downloaded from <… [cited by examiner]
Nikolaos Tsantalis et al., “RefactoringMiner 2.0,” 2022 [retrieved Jun. 27, 2025], IEEE Transactions on Software Engineering, vol. 48, Issue 3, pp. 930-950, downloaded from <url>:https://ieeexplore.ieee.org. (Year: 2022… [cited by examiner]
Aline Brito et al., “APIDiff: Detecting API breaking changes,” 2018 [retrieved Jun. 22, 2025], 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering, pp. 507-511, downloaded from <url… [cited by examiner]
Lina Ochoa et al., “BreakBot: Analyzing the Impact of Breaking Changes to Assist Library Evolution,” 2022 [retrieved Jun. 25, 2025], Proceedings of the ACM/IEEE 44th International Conference on Software Engineering: New… [cited by examiner]
Shahar Maoz et al., “CDDiff: Semantic Differencing for Class Diagrams”, 2011 [retrieved Mar. 6, 2026], pp. 230-254, downloaded from <url>:https://link.springer.com/chapter/10.1007/978-3-642-22655-7_12. (Year: 2011). [cited by examiner]
Lyuye Zhang et al., “Has My Release Disobeyed Semantic Versioning? Static Detection Based on Semantic Differencing”, Jan. 5, 2023 [ retrieved Mar. 6, 2026], pp. 1-12, downloaded from <url>:https://dl.acm.org/doi/abs/10.… [cited by examiner]
Xingliang Du et al., “AexPy: Detecting API Breaking Changes in Python Packages”, Dec. 21, 2022 [retrieved Mar. 6, 2026], pp. 470-481, downloaded from <url>:https://ieeexplore.ieee.org/abstract/document/9978982. (Year: 2… [cited by examiner]
Barthelemy Dagenais et al., SemDiff: Analysis and Recommendation Support for API Evolution, 2009 [retrieved Aug. 8, 2025], 2009 IEEE 31st International Conference on Software Engineering, pp. 599-602, downloaded from :h… [cited by applicant]
Istvan-Attila Csaszar and Radu Razvan Slavescu (Interactive call graph generation for software projects); pp. 8; Published on IEEE in Nov. 26 (Year: 2020). [cited by applicant]
Mehdi Keshani (Scalable Call Graph Constructor for Maven); pp. 3; Published in Mar. 28 (Year: 2021). [cited by applicant]
Mehdi Keshani, Georgios Gousios and Sebastian Proksch (Frankenstein: fast and lightweight call graph generation for softwarebuilds); pp. 47; Published in Nov. 16 (Year: 2023). [cited by applicant]
Riivo Kikas, Georgios Gousios, Marlon Dumas, and Dietmar Pfahl (Structure and Evolution of Package Dependency Networks)pp. 11; Published on IEEE Jul. 3 (Year: 2017). [cited by applicant]