driftdetect-core 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/boundaries/boundary-scanner.d.ts +76 -0
  2. package/dist/boundaries/boundary-scanner.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-scanner.js +801 -0
  4. package/dist/boundaries/boundary-scanner.js.map +1 -0
  5. package/dist/boundaries/data-access-learner.d.ts +126 -0
  6. package/dist/boundaries/data-access-learner.d.ts.map +1 -0
  7. package/dist/boundaries/data-access-learner.js +486 -0
  8. package/dist/boundaries/data-access-learner.js.map +1 -0
  9. package/dist/boundaries/index.d.ts +6 -0
  10. package/dist/boundaries/index.d.ts.map +1 -1
  11. package/dist/boundaries/index.js +6 -0
  12. package/dist/boundaries/index.js.map +1 -1
  13. package/dist/boundaries/security-prioritizer.d.ts +118 -0
  14. package/dist/boundaries/security-prioritizer.d.ts.map +1 -0
  15. package/dist/boundaries/security-prioritizer.js +316 -0
  16. package/dist/boundaries/security-prioritizer.js.map +1 -0
  17. package/dist/call-graph/analysis/coverage-analyzer.d.ts +201 -0
  18. package/dist/call-graph/analysis/coverage-analyzer.d.ts.map +1 -0
  19. package/dist/call-graph/analysis/coverage-analyzer.js +553 -0
  20. package/dist/call-graph/analysis/coverage-analyzer.js.map +1 -0
  21. package/dist/call-graph/analysis/dead-code-detector.d.ts +145 -0
  22. package/dist/call-graph/analysis/dead-code-detector.d.ts.map +1 -0
  23. package/dist/call-graph/analysis/dead-code-detector.js +391 -0
  24. package/dist/call-graph/analysis/dead-code-detector.js.map +1 -0
  25. package/dist/call-graph/analysis/graph-builder.d.ts +142 -0
  26. package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -0
  27. package/dist/call-graph/analysis/graph-builder.js +624 -0
  28. package/dist/call-graph/analysis/graph-builder.js.map +1 -0
  29. package/dist/call-graph/analysis/impact-analyzer.d.ts +150 -0
  30. package/dist/call-graph/analysis/impact-analyzer.d.ts.map +1 -0
  31. package/dist/call-graph/analysis/impact-analyzer.js +329 -0
  32. package/dist/call-graph/analysis/impact-analyzer.js.map +1 -0
  33. package/dist/call-graph/analysis/index.d.ts +11 -0
  34. package/dist/call-graph/analysis/index.d.ts.map +1 -0
  35. package/dist/call-graph/analysis/index.js +9 -0
  36. package/dist/call-graph/analysis/index.js.map +1 -0
  37. package/dist/call-graph/analysis/path-finder.d.ts +117 -0
  38. package/dist/call-graph/analysis/path-finder.d.ts.map +1 -0
  39. package/dist/call-graph/analysis/path-finder.js +360 -0
  40. package/dist/call-graph/analysis/path-finder.js.map +1 -0
  41. package/dist/call-graph/analysis/reachability.d.ts +56 -0
  42. package/dist/call-graph/analysis/reachability.d.ts.map +1 -0
  43. package/dist/call-graph/analysis/reachability.js +357 -0
  44. package/dist/call-graph/analysis/reachability.js.map +1 -0
  45. package/dist/call-graph/demo.d.ts +11 -0
  46. package/dist/call-graph/demo.d.ts.map +1 -0
  47. package/dist/call-graph/demo.js +339 -0
  48. package/dist/call-graph/demo.js.map +1 -0
  49. package/dist/call-graph/enrichment/enrichment-engine.d.ts +126 -0
  50. package/dist/call-graph/enrichment/enrichment-engine.d.ts.map +1 -0
  51. package/dist/call-graph/enrichment/enrichment-engine.js +760 -0
  52. package/dist/call-graph/enrichment/enrichment-engine.js.map +1 -0
  53. package/dist/call-graph/enrichment/impact-scorer.d.ts +59 -0
  54. package/dist/call-graph/enrichment/impact-scorer.d.ts.map +1 -0
  55. package/dist/call-graph/enrichment/impact-scorer.js +328 -0
  56. package/dist/call-graph/enrichment/impact-scorer.js.map +1 -0
  57. package/dist/call-graph/enrichment/index.d.ts +12 -0
  58. package/dist/call-graph/enrichment/index.d.ts.map +1 -0
  59. package/dist/call-graph/enrichment/index.js +15 -0
  60. package/dist/call-graph/enrichment/index.js.map +1 -0
  61. package/dist/call-graph/enrichment/remediation-generator.d.ts +41 -0
  62. package/dist/call-graph/enrichment/remediation-generator.d.ts.map +1 -0
  63. package/dist/call-graph/enrichment/remediation-generator.js +609 -0
  64. package/dist/call-graph/enrichment/remediation-generator.js.map +1 -0
  65. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts +71 -0
  66. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts.map +1 -0
  67. package/dist/call-graph/enrichment/sensitivity-classifier.js +454 -0
  68. package/dist/call-graph/enrichment/sensitivity-classifier.js.map +1 -0
  69. package/dist/call-graph/enrichment/types.d.ts +402 -0
  70. package/dist/call-graph/enrichment/types.d.ts.map +1 -0
  71. package/dist/call-graph/enrichment/types.js +9 -0
  72. package/dist/call-graph/enrichment/types.js.map +1 -0
  73. package/dist/call-graph/extractors/base-extractor.d.ts +112 -0
  74. package/dist/call-graph/extractors/base-extractor.d.ts.map +1 -0
  75. package/dist/call-graph/extractors/base-extractor.js +140 -0
  76. package/dist/call-graph/extractors/base-extractor.js.map +1 -0
  77. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +76 -0
  78. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -0
  79. package/dist/call-graph/extractors/csharp-data-access-extractor.js +387 -0
  80. package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -0
  81. package/dist/call-graph/extractors/csharp-extractor.d.ts +87 -0
  82. package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -0
  83. package/dist/call-graph/extractors/csharp-extractor.js +470 -0
  84. package/dist/call-graph/extractors/csharp-extractor.js.map +1 -0
  85. package/dist/call-graph/extractors/data-access-extractor.d.ts +76 -0
  86. package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -0
  87. package/dist/call-graph/extractors/data-access-extractor.js +234 -0
  88. package/dist/call-graph/extractors/data-access-extractor.js.map +1 -0
  89. package/dist/call-graph/extractors/index.d.ts +26 -0
  90. package/dist/call-graph/extractors/index.d.ts.map +1 -0
  91. package/dist/call-graph/extractors/index.js +36 -0
  92. package/dist/call-graph/extractors/index.js.map +1 -0
  93. package/dist/call-graph/extractors/java-data-access-extractor.d.ts +101 -0
  94. package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -0
  95. package/dist/call-graph/extractors/java-data-access-extractor.js +611 -0
  96. package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -0
  97. package/dist/call-graph/extractors/java-extractor.d.ts +87 -0
  98. package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -0
  99. package/dist/call-graph/extractors/java-extractor.js +510 -0
  100. package/dist/call-graph/extractors/java-extractor.js.map +1 -0
  101. package/dist/call-graph/extractors/php-data-access-extractor.d.ts +93 -0
  102. package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -0
  103. package/dist/call-graph/extractors/php-data-access-extractor.js +589 -0
  104. package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -0
  105. package/dist/call-graph/extractors/php-extractor.d.ts +104 -0
  106. package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -0
  107. package/dist/call-graph/extractors/php-extractor.js +619 -0
  108. package/dist/call-graph/extractors/php-extractor.js.map +1 -0
  109. package/dist/call-graph/extractors/python-data-access-extractor.d.ts +90 -0
  110. package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -0
  111. package/dist/call-graph/extractors/python-data-access-extractor.js +537 -0
  112. package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -0
  113. package/dist/call-graph/extractors/python-extractor.d.ts +98 -0
  114. package/dist/call-graph/extractors/python-extractor.d.ts.map +1 -0
  115. package/dist/call-graph/extractors/python-extractor.js +681 -0
  116. package/dist/call-graph/extractors/python-extractor.js.map +1 -0
  117. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +91 -0
  118. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -0
  119. package/dist/call-graph/extractors/semantic-data-access-scanner.js +498 -0
  120. package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -0
  121. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +122 -0
  122. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -0
  123. package/dist/call-graph/extractors/typescript-data-access-extractor.js +788 -0
  124. package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -0
  125. package/dist/call-graph/extractors/typescript-extractor.d.ts +145 -0
  126. package/dist/call-graph/extractors/typescript-extractor.d.ts.map +1 -0
  127. package/dist/call-graph/extractors/typescript-extractor.js +904 -0
  128. package/dist/call-graph/extractors/typescript-extractor.js.map +1 -0
  129. package/dist/call-graph/index.d.ts +127 -0
  130. package/dist/call-graph/index.d.ts.map +1 -0
  131. package/dist/call-graph/index.js +247 -0
  132. package/dist/call-graph/index.js.map +1 -0
  133. package/dist/call-graph/store/call-graph-store.d.ts +70 -0
  134. package/dist/call-graph/store/call-graph-store.d.ts.map +1 -0
  135. package/dist/call-graph/store/call-graph-store.js +210 -0
  136. package/dist/call-graph/store/call-graph-store.js.map +1 -0
  137. package/dist/call-graph/store/index.d.ts +7 -0
  138. package/dist/call-graph/store/index.d.ts.map +1 -0
  139. package/dist/call-graph/store/index.js +7 -0
  140. package/dist/call-graph/store/index.js.map +1 -0
  141. package/dist/call-graph/types.d.ts +376 -0
  142. package/dist/call-graph/types.d.ts.map +1 -0
  143. package/dist/call-graph/types.js +8 -0
  144. package/dist/call-graph/types.js.map +1 -0
  145. package/dist/index.d.ts +8 -0
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +12 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/lake/callgraph-shard-store.d.ts +168 -0
  150. package/dist/lake/callgraph-shard-store.d.ts.map +1 -0
  151. package/dist/lake/callgraph-shard-store.js +466 -0
  152. package/dist/lake/callgraph-shard-store.js.map +1 -0
  153. package/dist/lake/examples-store.d.ts +127 -0
  154. package/dist/lake/examples-store.d.ts.map +1 -0
  155. package/dist/lake/examples-store.js +389 -0
  156. package/dist/lake/examples-store.js.map +1 -0
  157. package/dist/lake/index-store.d.ts +82 -0
  158. package/dist/lake/index-store.d.ts.map +1 -0
  159. package/dist/lake/index-store.js +359 -0
  160. package/dist/lake/index-store.js.map +1 -0
  161. package/dist/lake/index.d.ts +93 -0
  162. package/dist/lake/index.d.ts.map +1 -0
  163. package/dist/lake/index.js +138 -0
  164. package/dist/lake/index.js.map +1 -0
  165. package/dist/lake/lake.bak/index-store.d.ts +82 -0
  166. package/dist/lake/lake.bak/index-store.d.ts.map +1 -0
  167. package/dist/lake/lake.bak/index-store.js +357 -0
  168. package/dist/lake/lake.bak/index-store.js.map +1 -0
  169. package/dist/lake/lake.bak/index.d.ts +81 -0
  170. package/dist/lake/lake.bak/index.d.ts.map +1 -0
  171. package/dist/lake/lake.bak/index.js +114 -0
  172. package/dist/lake/lake.bak/index.js.map +1 -0
  173. package/dist/lake/lake.bak/manifest-store.d.ts +51 -0
  174. package/dist/lake/lake.bak/manifest-store.d.ts.map +1 -0
  175. package/dist/lake/lake.bak/manifest-store.js +347 -0
  176. package/dist/lake/lake.bak/manifest-store.js.map +1 -0
  177. package/dist/lake/lake.bak/query-engine.d.ts +112 -0
  178. package/dist/lake/lake.bak/query-engine.d.ts.map +1 -0
  179. package/dist/lake/lake.bak/query-engine.js +370 -0
  180. package/dist/lake/lake.bak/query-engine.js.map +1 -0
  181. package/dist/lake/lake.bak/types.d.ts +428 -0
  182. package/dist/lake/lake.bak/types.d.ts.map +1 -0
  183. package/dist/lake/lake.bak/types.js +46 -0
  184. package/dist/lake/lake.bak/types.js.map +1 -0
  185. package/dist/lake/lake.bak/view-materializer.d.ts +70 -0
  186. package/dist/lake/lake.bak/view-materializer.d.ts.map +1 -0
  187. package/dist/lake/lake.bak/view-materializer.js +314 -0
  188. package/dist/lake/lake.bak/view-materializer.js.map +1 -0
  189. package/dist/lake/lake.bak/view-store.d.ts +57 -0
  190. package/dist/lake/lake.bak/view-store.d.ts.map +1 -0
  191. package/dist/lake/lake.bak/view-store.js +348 -0
  192. package/dist/lake/lake.bak/view-store.js.map +1 -0
  193. package/dist/lake/manifest-store.d.ts +51 -0
  194. package/dist/lake/manifest-store.d.ts.map +1 -0
  195. package/dist/lake/manifest-store.js +348 -0
  196. package/dist/lake/manifest-store.js.map +1 -0
  197. package/dist/lake/pattern-shard-store.d.ts +87 -0
  198. package/dist/lake/pattern-shard-store.d.ts.map +1 -0
  199. package/dist/lake/pattern-shard-store.js +347 -0
  200. package/dist/lake/pattern-shard-store.js.map +1 -0
  201. package/dist/lake/query-engine.d.ts +124 -0
  202. package/dist/lake/query-engine.d.ts.map +1 -0
  203. package/dist/lake/query-engine.js +453 -0
  204. package/dist/lake/query-engine.js.map +1 -0
  205. package/dist/lake/security-shard-store.d.ts +156 -0
  206. package/dist/lake/security-shard-store.d.ts.map +1 -0
  207. package/dist/lake/security-shard-store.js +498 -0
  208. package/dist/lake/security-shard-store.js.map +1 -0
  209. package/dist/lake/types.d.ts +428 -0
  210. package/dist/lake/types.d.ts.map +1 -0
  211. package/dist/lake/types.js +46 -0
  212. package/dist/lake/types.js.map +1 -0
  213. package/dist/lake/view-materializer.d.ts +70 -0
  214. package/dist/lake/view-materializer.d.ts.map +1 -0
  215. package/dist/lake/view-materializer.js +314 -0
  216. package/dist/lake/view-materializer.js.map +1 -0
  217. package/dist/lake/view-store.d.ts +57 -0
  218. package/dist/lake/view-store.d.ts.map +1 -0
  219. package/dist/lake/view-store.js +348 -0
  220. package/dist/lake/view-store.js.map +1 -0
  221. package/dist/parsers/tree-sitter/index.d.ts +1 -0
  222. package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
  223. package/dist/parsers/tree-sitter/index.js +4 -0
  224. package/dist/parsers/tree-sitter/index.js.map +1 -1
  225. package/dist/parsers/tree-sitter/typescript-loader.d.ts +58 -0
  226. package/dist/parsers/tree-sitter/typescript-loader.d.ts.map +1 -0
  227. package/dist/parsers/tree-sitter/typescript-loader.js +250 -0
  228. package/dist/parsers/tree-sitter/typescript-loader.js.map +1 -0
  229. package/dist/store/project-config.d.ts +154 -0
  230. package/dist/store/project-config.d.ts.map +1 -0
  231. package/dist/store/project-config.js +235 -0
  232. package/dist/store/project-config.js.map +1 -0
  233. package/dist/store/project-registry.d.ts +241 -0
  234. package/dist/store/project-registry.d.ts.map +1 -0
  235. package/dist/store/project-registry.js +557 -0
  236. package/dist/store/project-registry.js.map +1 -0
  237. package/package.json +4 -2
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Java Call Graph Extractor
3
+ *
4
+ * Extracts functions, calls, imports, and exports from Java
5
+ * using tree-sitter for AST parsing.
6
+ *
7
+ * Handles:
8
+ * - Method definitions (regular, static, abstract)
9
+ * - Constructors
10
+ * - Class hierarchies (extends, implements)
11
+ * - Package imports
12
+ * - Lambda expressions
13
+ * - Method references (::)
14
+ * - Spring annotations (@Controller, @Service, etc.)
15
+ * - Inner classes
16
+ */
17
+ import { BaseCallGraphExtractor } from './base-extractor.js';
18
+ import type { CallGraphLanguage, FileExtractionResult } from '../types.js';
19
+ /**
20
+ * Java call graph extractor using tree-sitter
21
+ */
22
+ export declare class JavaCallGraphExtractor extends BaseCallGraphExtractor {
23
+ readonly language: CallGraphLanguage;
24
+ readonly extensions: string[];
25
+ private parser;
26
+ /**
27
+ * Check if tree-sitter is available
28
+ */
29
+ static isAvailable(): boolean;
30
+ /**
31
+ * Extract call graph information from Java source
32
+ */
33
+ extract(source: string, filePath: string): FileExtractionResult;
34
+ /**
35
+ * Visit a tree-sitter node and extract information
36
+ */
37
+ private visitNode;
38
+ /**
39
+ * Extract a class/record/enum declaration
40
+ */
41
+ private extractClassDeclaration;
42
+ /**
43
+ * Extract an interface declaration
44
+ */
45
+ private extractInterfaceDeclaration;
46
+ /**
47
+ * Extract a method declaration
48
+ */
49
+ private extractMethodDeclaration;
50
+ /**
51
+ * Extract a constructor declaration
52
+ */
53
+ private extractConstructorDeclaration;
54
+ /**
55
+ * Extract an import declaration
56
+ */
57
+ private extractImportDeclaration;
58
+ /**
59
+ * Extract a method invocation
60
+ */
61
+ private extractMethodInvocation;
62
+ /**
63
+ * Extract an object creation expression (new Foo())
64
+ */
65
+ private extractObjectCreation;
66
+ /**
67
+ * Extract a method reference (Class::method)
68
+ */
69
+ private extractMethodReference;
70
+ /**
71
+ * Extract calls from a method body
72
+ */
73
+ private extractCallsFromBody;
74
+ /**
75
+ * Extract parameters from a formal_parameters node
76
+ */
77
+ private extractParameters;
78
+ /**
79
+ * Extract annotations from a node
80
+ */
81
+ private extractAnnotations;
82
+ /**
83
+ * Check if a node has a specific modifier
84
+ */
85
+ private hasModifier;
86
+ }
87
+ //# sourceMappingURL=java-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-extractor.d.ts","sourceRoot":"","sources":["../../../src/call-graph/extractors/java-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;IAChE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAU;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAa;IAE1C,OAAO,CAAC,MAAM,CAAiC;IAE/C;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAoC/D;;OAEG;IACH,OAAO,CAAC,SAAS;IAkDjB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqE/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAsDnC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IA4CrC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiD/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwD7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,WAAW;CAgBpB"}
@@ -0,0 +1,510 @@
1
+ /**
2
+ * Java Call Graph Extractor
3
+ *
4
+ * Extracts functions, calls, imports, and exports from Java
5
+ * using tree-sitter for AST parsing.
6
+ *
7
+ * Handles:
8
+ * - Method definitions (regular, static, abstract)
9
+ * - Constructors
10
+ * - Class hierarchies (extends, implements)
11
+ * - Package imports
12
+ * - Lambda expressions
13
+ * - Method references (::)
14
+ * - Spring annotations (@Controller, @Service, etc.)
15
+ * - Inner classes
16
+ */
17
+ import { BaseCallGraphExtractor } from './base-extractor.js';
18
+ import { isJavaTreeSitterAvailable, createJavaParser, } from '../../parsers/tree-sitter/java-loader.js';
19
+ /**
20
+ * Java call graph extractor using tree-sitter
21
+ */
22
+ export class JavaCallGraphExtractor extends BaseCallGraphExtractor {
23
+ language = 'java';
24
+ extensions = ['.java'];
25
+ parser = null;
26
+ /**
27
+ * Check if tree-sitter is available
28
+ */
29
+ static isAvailable() {
30
+ return isJavaTreeSitterAvailable();
31
+ }
32
+ /**
33
+ * Extract call graph information from Java source
34
+ */
35
+ extract(source, filePath) {
36
+ const result = this.createEmptyResult(filePath);
37
+ if (!isJavaTreeSitterAvailable()) {
38
+ result.errors.push('Tree-sitter not available for Java parsing');
39
+ return result;
40
+ }
41
+ try {
42
+ if (!this.parser) {
43
+ this.parser = createJavaParser();
44
+ }
45
+ const tree = this.parser.parse(source);
46
+ // Extract package name
47
+ let packageName = null;
48
+ for (const child of tree.rootNode.children) {
49
+ if (child.type === 'package_declaration') {
50
+ const nameNode = child.children.find(c => c.type === 'scoped_identifier' || c.type === 'identifier');
51
+ packageName = nameNode?.text ?? null;
52
+ break;
53
+ }
54
+ }
55
+ this.visitNode(tree.rootNode, result, source, null, packageName);
56
+ }
57
+ catch (error) {
58
+ result.errors.push(error instanceof Error ? error.message : 'Unknown parse error');
59
+ }
60
+ return result;
61
+ }
62
+ /**
63
+ * Visit a tree-sitter node and extract information
64
+ */
65
+ visitNode(node, result, source, currentClass, currentPackage) {
66
+ switch (node.type) {
67
+ case 'class_declaration':
68
+ case 'record_declaration':
69
+ case 'enum_declaration':
70
+ this.extractClassDeclaration(node, result, source, currentPackage);
71
+ break;
72
+ case 'interface_declaration':
73
+ this.extractInterfaceDeclaration(node, result, source, currentPackage);
74
+ break;
75
+ case 'method_declaration':
76
+ this.extractMethodDeclaration(node, result, source, currentClass, currentPackage);
77
+ break;
78
+ case 'constructor_declaration':
79
+ this.extractConstructorDeclaration(node, result, source, currentClass, currentPackage);
80
+ break;
81
+ case 'import_declaration':
82
+ this.extractImportDeclaration(node, result);
83
+ break;
84
+ case 'method_invocation':
85
+ this.extractMethodInvocation(node, result, source);
86
+ break;
87
+ case 'object_creation_expression':
88
+ this.extractObjectCreation(node, result, source);
89
+ break;
90
+ case 'method_reference':
91
+ this.extractMethodReference(node, result, source);
92
+ break;
93
+ default:
94
+ // Recurse into children
95
+ for (const child of node.children) {
96
+ this.visitNode(child, result, source, currentClass, currentPackage);
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * Extract a class/record/enum declaration
102
+ */
103
+ extractClassDeclaration(node, result, source, currentPackage) {
104
+ const nameNode = node.childForFieldName('name');
105
+ if (!nameNode)
106
+ return;
107
+ const className = nameNode.text;
108
+ const fullClassName = currentPackage ? `${currentPackage}.${className}` : className;
109
+ // Get base classes (extends)
110
+ const baseClasses = [];
111
+ const superclassNode = node.childForFieldName('superclass');
112
+ if (superclassNode) {
113
+ // Skip the 'extends' keyword
114
+ const typeNode = superclassNode.children.find(c => c.type === 'type_identifier' || c.type === 'scoped_type_identifier' || c.type === 'generic_type');
115
+ if (typeNode) {
116
+ baseClasses.push(typeNode.text);
117
+ }
118
+ }
119
+ // Get interfaces (implements)
120
+ const interfacesNode = node.childForFieldName('interfaces');
121
+ if (interfacesNode) {
122
+ for (const child of interfacesNode.children) {
123
+ if (child.type === 'type_identifier' || child.type === 'scoped_type_identifier' || child.type === 'generic_type') {
124
+ baseClasses.push(child.text);
125
+ }
126
+ }
127
+ }
128
+ // Get methods
129
+ const methods = [];
130
+ const bodyNode = node.childForFieldName('body');
131
+ if (bodyNode) {
132
+ for (const member of bodyNode.children) {
133
+ if (member.type === 'method_declaration') {
134
+ const methodNameNode = member.childForFieldName('name');
135
+ if (methodNameNode) {
136
+ methods.push(methodNameNode.text);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ // Check if public
142
+ const isExported = this.hasModifier(node, 'public');
143
+ result.classes.push(this.createClass({
144
+ name: className,
145
+ startLine: node.startPosition.row + 1,
146
+ endLine: node.endPosition.row + 1,
147
+ baseClasses,
148
+ methods,
149
+ isExported,
150
+ }));
151
+ // Visit class body with class context
152
+ if (bodyNode) {
153
+ for (const member of bodyNode.children) {
154
+ this.visitNode(member, result, source, fullClassName, currentPackage);
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Extract an interface declaration
160
+ */
161
+ extractInterfaceDeclaration(node, result, source, currentPackage) {
162
+ const nameNode = node.childForFieldName('name');
163
+ if (!nameNode)
164
+ return;
165
+ const interfaceName = nameNode.text;
166
+ const fullName = currentPackage ? `${currentPackage}.${interfaceName}` : interfaceName;
167
+ // Get extended interfaces
168
+ const baseClasses = [];
169
+ const extendsNode = node.childForFieldName('extends');
170
+ if (extendsNode) {
171
+ for (const child of extendsNode.children) {
172
+ if (child.type === 'type_identifier' || child.type === 'scoped_type_identifier') {
173
+ baseClasses.push(child.text);
174
+ }
175
+ }
176
+ }
177
+ // Get methods
178
+ const methods = [];
179
+ const bodyNode = node.childForFieldName('body');
180
+ if (bodyNode) {
181
+ for (const member of bodyNode.children) {
182
+ if (member.type === 'method_declaration') {
183
+ const methodNameNode = member.childForFieldName('name');
184
+ if (methodNameNode) {
185
+ methods.push(methodNameNode.text);
186
+ }
187
+ }
188
+ }
189
+ }
190
+ result.classes.push(this.createClass({
191
+ name: interfaceName,
192
+ startLine: node.startPosition.row + 1,
193
+ endLine: node.endPosition.row + 1,
194
+ baseClasses,
195
+ methods,
196
+ isExported: this.hasModifier(node, 'public'),
197
+ }));
198
+ // Visit interface body
199
+ if (bodyNode) {
200
+ for (const member of bodyNode.children) {
201
+ this.visitNode(member, result, source, fullName, currentPackage);
202
+ }
203
+ }
204
+ }
205
+ /**
206
+ * Extract a method declaration
207
+ */
208
+ extractMethodDeclaration(node, result, source, currentClass, _currentPackage) {
209
+ const nameNode = node.childForFieldName('name');
210
+ if (!nameNode)
211
+ return;
212
+ const name = nameNode.text;
213
+ const isStatic = this.hasModifier(node, 'static');
214
+ const isPublic = this.hasModifier(node, 'public');
215
+ // Get return type
216
+ const returnTypeNode = node.childForFieldName('type');
217
+ const returnType = returnTypeNode?.text;
218
+ // Get parameters
219
+ const parametersNode = node.childForFieldName('parameters');
220
+ const parameters = parametersNode ? this.extractParameters(parametersNode) : [];
221
+ // Get annotations (decorators)
222
+ const decorators = this.extractAnnotations(node);
223
+ // Get body
224
+ const bodyNode = node.childForFieldName('body');
225
+ const func = this.createFunction({
226
+ name,
227
+ qualifiedName: currentClass ? `${currentClass}.${name}` : name,
228
+ startLine: node.startPosition.row + 1,
229
+ endLine: node.endPosition.row + 1,
230
+ startColumn: node.startPosition.column,
231
+ endColumn: node.endPosition.column,
232
+ parameters,
233
+ returnType,
234
+ isMethod: currentClass !== null,
235
+ isStatic,
236
+ isExported: isPublic,
237
+ isConstructor: false,
238
+ isAsync: false, // Java doesn't have async keyword
239
+ className: currentClass ?? undefined,
240
+ decorators,
241
+ bodyStartLine: bodyNode ? bodyNode.startPosition.row + 1 : node.startPosition.row + 1,
242
+ bodyEndLine: bodyNode ? bodyNode.endPosition.row + 1 : node.endPosition.row + 1,
243
+ });
244
+ result.functions.push(func);
245
+ // Extract calls from method body
246
+ if (bodyNode) {
247
+ this.extractCallsFromBody(bodyNode, result, source);
248
+ }
249
+ }
250
+ /**
251
+ * Extract a constructor declaration
252
+ */
253
+ extractConstructorDeclaration(node, result, source, currentClass, _currentPackage) {
254
+ // Get parameters
255
+ const parametersNode = node.childForFieldName('parameters');
256
+ const parameters = parametersNode ? this.extractParameters(parametersNode) : [];
257
+ // Get annotations
258
+ const decorators = this.extractAnnotations(node);
259
+ // Get body
260
+ const bodyNode = node.childForFieldName('body');
261
+ const func = this.createFunction({
262
+ name: 'constructor',
263
+ qualifiedName: currentClass ? `${currentClass}.constructor` : 'constructor',
264
+ startLine: node.startPosition.row + 1,
265
+ endLine: node.endPosition.row + 1,
266
+ startColumn: node.startPosition.column,
267
+ endColumn: node.endPosition.column,
268
+ parameters,
269
+ isMethod: true,
270
+ isStatic: false,
271
+ isExported: this.hasModifier(node, 'public'),
272
+ isConstructor: true,
273
+ isAsync: false,
274
+ className: currentClass ?? undefined,
275
+ decorators,
276
+ bodyStartLine: bodyNode ? bodyNode.startPosition.row + 1 : node.startPosition.row + 1,
277
+ bodyEndLine: bodyNode ? bodyNode.endPosition.row + 1 : node.endPosition.row + 1,
278
+ });
279
+ result.functions.push(func);
280
+ // Extract calls from constructor body
281
+ if (bodyNode) {
282
+ this.extractCallsFromBody(bodyNode, result, source);
283
+ }
284
+ }
285
+ /**
286
+ * Extract an import declaration
287
+ */
288
+ extractImportDeclaration(node, result) {
289
+ // Find the scoped_identifier or identifier
290
+ let importPath = '';
291
+ let isWildcard = false;
292
+ for (const child of node.children) {
293
+ if (child.type === 'scoped_identifier' || child.type === 'identifier') {
294
+ importPath = child.text;
295
+ }
296
+ else if (child.type === 'asterisk') {
297
+ isWildcard = true;
298
+ }
299
+ }
300
+ if (!importPath)
301
+ return;
302
+ const parts = importPath.split('.');
303
+ const localName = isWildcard ? '*' : (parts.pop() ?? importPath);
304
+ result.imports.push(this.createImport({
305
+ source: importPath,
306
+ names: [{
307
+ imported: localName,
308
+ local: localName,
309
+ isNamespace: isWildcard,
310
+ }],
311
+ line: node.startPosition.row + 1,
312
+ }));
313
+ }
314
+ /**
315
+ * Extract a method invocation
316
+ */
317
+ extractMethodInvocation(node, result, _source) {
318
+ const nameNode = node.childForFieldName('name');
319
+ if (!nameNode)
320
+ return;
321
+ const calleeName = nameNode.text;
322
+ let receiver;
323
+ // Get receiver (object)
324
+ const objectNode = node.childForFieldName('object');
325
+ if (objectNode) {
326
+ receiver = objectNode.text;
327
+ }
328
+ // Count arguments
329
+ const argsNode = node.childForFieldName('arguments');
330
+ let argumentCount = 0;
331
+ const callbackRefs = [];
332
+ if (argsNode) {
333
+ for (const child of argsNode.children) {
334
+ if (child.type !== '(' && child.type !== ')' && child.type !== ',') {
335
+ argumentCount++;
336
+ // Check for method references or lambda callbacks
337
+ if (child.type === 'identifier') {
338
+ callbackRefs.push(child.text);
339
+ }
340
+ }
341
+ }
342
+ }
343
+ const call = this.createCall({
344
+ calleeName,
345
+ receiver,
346
+ fullExpression: node.text,
347
+ line: node.startPosition.row + 1,
348
+ column: node.startPosition.column,
349
+ argumentCount,
350
+ isMethodCall: !!receiver,
351
+ isConstructorCall: false,
352
+ });
353
+ result.calls.push(call);
354
+ }
355
+ /**
356
+ * Extract an object creation expression (new Foo())
357
+ */
358
+ extractObjectCreation(node, result, _source) {
359
+ const typeNode = node.childForFieldName('type');
360
+ if (!typeNode)
361
+ return;
362
+ let calleeName;
363
+ let receiver;
364
+ // Scoped type: new com.example.Foo()
365
+ if (typeNode.type === 'scoped_type_identifier') {
366
+ const parts = typeNode.text.split('.');
367
+ calleeName = parts.pop() ?? typeNode.text;
368
+ if (parts.length > 0) {
369
+ receiver = parts.join('.');
370
+ }
371
+ }
372
+ // Generic type: new ArrayList<String>()
373
+ else if (typeNode.type === 'generic_type') {
374
+ const nameNode = typeNode.children.find(c => c.type === 'type_identifier' || c.type === 'scoped_type_identifier');
375
+ calleeName = nameNode?.text ?? typeNode.text;
376
+ }
377
+ // Simple type: new Foo()
378
+ else {
379
+ calleeName = typeNode.text;
380
+ }
381
+ // Count arguments
382
+ const argsNode = node.childForFieldName('arguments');
383
+ let argumentCount = 0;
384
+ if (argsNode) {
385
+ for (const child of argsNode.children) {
386
+ if (child.type !== '(' && child.type !== ')' && child.type !== ',') {
387
+ argumentCount++;
388
+ }
389
+ }
390
+ }
391
+ const call = this.createCall({
392
+ calleeName,
393
+ receiver,
394
+ fullExpression: node.text,
395
+ line: node.startPosition.row + 1,
396
+ column: node.startPosition.column,
397
+ argumentCount,
398
+ isMethodCall: false,
399
+ isConstructorCall: true,
400
+ });
401
+ result.calls.push(call);
402
+ }
403
+ /**
404
+ * Extract a method reference (Class::method)
405
+ */
406
+ extractMethodReference(node, result, _source) {
407
+ // Method references are like: String::valueOf, this::process, obj::method
408
+ const text = node.text;
409
+ const parts = text.split('::');
410
+ if (parts.length === 2 && parts[0] && parts[1]) {
411
+ const receiver = parts[0];
412
+ const methodName = parts[1];
413
+ const call = this.createCall({
414
+ calleeName: methodName === 'new' ? receiver : methodName,
415
+ receiver: methodName === 'new' ? undefined : receiver,
416
+ fullExpression: text,
417
+ line: node.startPosition.row + 1,
418
+ column: node.startPosition.column,
419
+ argumentCount: 0,
420
+ isMethodCall: methodName !== 'new',
421
+ isConstructorCall: methodName === 'new',
422
+ });
423
+ result.calls.push(call);
424
+ }
425
+ }
426
+ /**
427
+ * Extract calls from a method body
428
+ */
429
+ extractCallsFromBody(node, result, source) {
430
+ const visit = (n) => {
431
+ if (n.type === 'method_invocation') {
432
+ this.extractMethodInvocation(n, result, source);
433
+ }
434
+ else if (n.type === 'object_creation_expression') {
435
+ this.extractObjectCreation(n, result, source);
436
+ }
437
+ else if (n.type === 'method_reference') {
438
+ this.extractMethodReference(n, result, source);
439
+ }
440
+ // Don't recurse into nested class declarations
441
+ if (n.type !== 'class_declaration' && n.type !== 'anonymous_class_body') {
442
+ for (const child of n.children) {
443
+ visit(child);
444
+ }
445
+ }
446
+ };
447
+ for (const child of node.children) {
448
+ visit(child);
449
+ }
450
+ }
451
+ /**
452
+ * Extract parameters from a formal_parameters node
453
+ */
454
+ extractParameters(node) {
455
+ const params = [];
456
+ for (const child of node.children) {
457
+ if (child.type === 'formal_parameter' || child.type === 'spread_parameter') {
458
+ const nameNode = child.childForFieldName('name');
459
+ const typeNode = child.childForFieldName('type');
460
+ if (nameNode) {
461
+ params.push(this.parseParameter(nameNode.text, typeNode?.text, false, child.type === 'spread_parameter'));
462
+ }
463
+ }
464
+ }
465
+ return params;
466
+ }
467
+ /**
468
+ * Extract annotations from a node
469
+ */
470
+ extractAnnotations(node) {
471
+ const annotations = [];
472
+ // Look for annotation siblings before the node
473
+ let sibling = node.previousNamedSibling;
474
+ while (sibling && (sibling.type === 'annotation' || sibling.type === 'marker_annotation')) {
475
+ annotations.unshift(sibling.text);
476
+ sibling = sibling.previousNamedSibling;
477
+ }
478
+ // Also check modifiers node which may contain annotations
479
+ for (const child of node.children) {
480
+ if (child.type === 'modifiers') {
481
+ for (const mod of child.children) {
482
+ if (mod.type === 'annotation' || mod.type === 'marker_annotation') {
483
+ annotations.push(mod.text);
484
+ }
485
+ }
486
+ }
487
+ }
488
+ return annotations;
489
+ }
490
+ /**
491
+ * Check if a node has a specific modifier
492
+ */
493
+ hasModifier(node, modifier) {
494
+ for (const child of node.children) {
495
+ if (child.type === 'modifiers') {
496
+ for (const mod of child.children) {
497
+ if (mod.text === modifier) {
498
+ return true;
499
+ }
500
+ }
501
+ }
502
+ // Direct modifier child
503
+ if (child.text === modifier) {
504
+ return true;
505
+ }
506
+ }
507
+ return false;
508
+ }
509
+ }
510
+ //# sourceMappingURL=java-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-extractor.js","sourceRoot":"","sources":["../../../src/call-graph/extractors/java-extractor.ts"],"names":[],"mappings":"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"}