cgraphx 2.0.1 → 2.0.3

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 (701) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +7 -5
  2. package/dist/.claude-template/commands/end.md +1 -1
  3. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
  6. package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
  7. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
  8. package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
  9. package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
  10. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  11. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  12. package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
  13. package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
  14. package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
  15. package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
  16. package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
  17. package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
  18. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  19. package/dist/core/code/engine/cli/analyze.js +1086 -0
  20. package/dist/core/code/engine/cli/cli-message.js +83 -0
  21. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  22. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  23. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  24. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  25. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  26. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  27. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  28. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  29. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  30. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  31. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  32. package/dist/core/code/engine/cli/status.js +156 -0
  33. package/dist/core/code/engine/cli/tool.js +384 -0
  34. package/dist/core/code/engine/config/ignore-service.js +511 -0
  35. package/dist/core/code/engine/config/supported-languages.js +17 -0
  36. package/dist/core/code/engine/core/analysis-features.js +64 -0
  37. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  38. package/dist/core/code/engine/core/git-staleness.js +180 -0
  39. package/dist/core/code/engine/core/graph/graph.js +180 -0
  40. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  41. package/dist/core/code/engine/core/graph/types.js +2 -0
  42. package/dist/core/code/engine/core/index-freshness.js +12 -0
  43. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  44. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  45. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  46. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  47. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  48. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  49. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  50. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  51. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  52. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  56. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  57. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  58. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  98. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  99. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  100. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  101. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  102. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  103. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  104. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  105. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  106. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  110. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  111. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  112. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  113. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  114. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  115. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  116. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  117. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  118. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  119. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  120. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  121. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  122. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  123. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  124. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  125. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  126. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  127. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  128. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  129. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  136. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  137. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  138. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  139. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  140. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  141. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  142. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  143. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  144. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  145. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  146. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  147. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  148. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  158. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  159. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  160. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  174. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  175. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  176. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  177. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  178. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  179. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  180. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  181. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  182. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  183. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  184. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  185. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  199. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  200. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  217. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  218. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  219. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  220. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  221. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  222. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  223. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  224. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  234. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  235. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  236. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  237. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  238. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  239. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  240. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  241. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  242. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  257. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  258. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  259. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  274. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  281. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  282. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  283. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  298. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  299. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  300. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  301. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  302. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  303. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  304. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  305. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  306. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  307. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  308. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  315. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  316. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  317. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  332. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  333. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  334. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  335. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  336. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  337. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  338. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  339. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  340. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  347. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  348. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  349. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  350. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  351. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  352. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  353. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  354. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  355. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  363. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  364. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  365. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  366. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  367. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  368. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  369. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  370. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  371. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  375. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  376. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  377. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  378. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  379. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  380. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  381. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  382. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  383. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  396. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  397. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  398. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  399. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  400. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  414. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  415. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  416. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  417. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  418. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  419. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  420. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  421. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  431. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  432. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  433. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  434. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  435. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  436. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  437. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  438. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  439. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  440. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  442. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  443. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  444. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  445. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  449. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  450. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  451. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  452. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  453. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  454. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  455. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  456. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  457. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  458. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  459. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  460. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  461. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  468. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  469. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  470. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  485. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  486. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  487. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  488. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  489. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  490. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  491. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  492. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  493. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  494. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  495. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  501. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  502. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  530. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  531. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  532. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  533. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  534. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  535. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  536. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  537. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  538. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  539. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  540. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  541. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  542. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  547. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  548. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  549. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  550. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  551. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  552. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  553. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  554. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  555. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  556. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  557. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  558. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  559. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  560. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  561. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  562. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  564. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  565. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  566. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  567. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  568. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  569. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  570. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  571. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  572. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  573. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  574. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  575. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  576. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  577. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  582. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  583. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  584. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  585. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  586. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  587. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  588. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  589. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  590. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  591. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  592. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  593. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  594. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  595. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  596. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  597. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  598. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  599. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  600. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  601. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  602. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  603. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  604. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  605. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  606. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  607. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  608. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  609. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  610. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  611. package/dist/core/code/engine/core/logger.js +339 -0
  612. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  613. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  614. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  615. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  616. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  617. package/dist/core/code/engine/lib/utils.js +121 -0
  618. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  619. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  620. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  621. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  622. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  623. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  624. package/dist/core/code/engine/storage/branch-index.js +72 -0
  625. package/dist/core/code/engine/storage/file-hash.js +95 -0
  626. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  627. package/dist/core/code/engine/storage/git.js +555 -0
  628. package/dist/core/code/engine/storage/index-lock.js +664 -0
  629. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  630. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  631. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  632. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  633. package/dist/core/code/engine/types/pipeline.js +2 -0
  634. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  635. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  636. package/dist/core/code/shared/graph/types.js +8 -0
  637. package/dist/core/code/shared/index.js +105 -0
  638. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  639. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  640. package/dist/core/code/shared/integrations/retry.js +70 -0
  641. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  642. package/dist/core/code/shared/language-detection.js +162 -0
  643. package/dist/core/code/shared/languages.js +27 -0
  644. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  645. package/dist/core/code/shared/mro-strategy.js +2 -0
  646. package/dist/core/code/shared/pipeline.js +5 -0
  647. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  648. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  649. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  650. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  651. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  652. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  653. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  654. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  655. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  656. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  657. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  658. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  659. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  660. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  661. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  662. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  663. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  664. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  665. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  666. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  667. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  668. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  669. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  670. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  671. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  672. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  673. package/dist/core/code/shared/test-helpers.js +17 -0
  674. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  675. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  676. package/dist/core/features/scanner.d.ts +2 -0
  677. package/dist/core/features/scanner.d.ts.map +1 -1
  678. package/dist/core/features/scanner.js +27 -6
  679. package/dist/core/features/scanner.js.map +1 -1
  680. package/dist/core/timeline/cli.d.ts.map +1 -1
  681. package/dist/core/timeline/cli.js +13 -6
  682. package/dist/core/timeline/cli.js.map +1 -1
  683. package/dist/core/timeline/debris.d.ts +20 -0
  684. package/dist/core/timeline/debris.d.ts.map +1 -0
  685. package/dist/core/timeline/debris.js +124 -0
  686. package/dist/core/timeline/debris.js.map +1 -0
  687. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  688. package/dist/core/timeline/hook-runner.js +3 -1
  689. package/dist/core/timeline/hook-runner.js.map +1 -1
  690. package/dist/core/timeline/hooks.d.ts.map +1 -1
  691. package/dist/core/timeline/hooks.js +13 -5
  692. package/dist/core/timeline/hooks.js.map +1 -1
  693. package/dist/core/timeline/installer.d.ts +2 -0
  694. package/dist/core/timeline/installer.d.ts.map +1 -1
  695. package/dist/core/timeline/installer.js +12 -0
  696. package/dist/core/timeline/installer.js.map +1 -1
  697. package/dist/core/timeline/project-root.d.ts +21 -0
  698. package/dist/core/timeline/project-root.d.ts.map +1 -0
  699. package/dist/core/timeline/project-root.js +83 -0
  700. package/dist/core/timeline/project-root.js.map +1 -0
  701. package/package.json +1 -1
@@ -0,0 +1,791 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitJavaScopeCaptures = emitJavaScopeCaptures;
4
+ const bean_candidates_js_1 = require("../../frameworks/spring/bean-candidates.js");
5
+ const ast_helpers_js_1 = require("../../utils/ast-helpers.js");
6
+ const import_decomposer_js_1 = require("./import-decomposer.js");
7
+ const arity_metadata_js_1 = require("./arity-metadata.js");
8
+ const receiver_binding_js_1 = require("./receiver-binding.js");
9
+ const query_js_1 = require("./query.js");
10
+ const cache_stats_js_1 = require("./cache-stats.js");
11
+ const constants_js_1 = require("../../constants.js");
12
+ const safe_parse_js_1 = require("../../../tree-sitter/safe-parse.js");
13
+ const capture_side_channel_js_1 = require("./capture-side-channel.js");
14
+ const package_facts_js_1 = require("./package-facts.js");
15
+ const callable_flow_captures_js_1 = require("../../utils/callable-flow-captures.js");
16
+ const spring_config_bindings_js_1 = require("./spring-config-bindings.js");
17
+ const spring_di_js_1 = require("./spring-di.js");
18
+ const receiver_chain_captures_js_1 = require("../../utils/receiver-chain-captures.js");
19
+ const spring_aop_js_1 = require("./spring-aop.js");
20
+ const spring_conditionals_js_1 = require("./spring-conditionals.js");
21
+ /** Declaration anchors that carry function-like arity metadata. */
22
+ const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.constructor'];
23
+ /** tree-sitter-java node types that the method extractor accepts. */
24
+ const FUNCTION_NODE_TYPES = [
25
+ 'method_declaration',
26
+ 'constructor_declaration',
27
+ 'compact_constructor_declaration',
28
+ ];
29
+ const JAVA_CALLABLE_CAPTURE_OPTIONS = {
30
+ functionNodeTypes: new Set([...FUNCTION_NODE_TYPES, 'lambda_expression']),
31
+ callNodeTypes: new Set(['method_invocation']),
32
+ parameterListNodeTypes: new Set(['formal_parameters', 'argument_list']),
33
+ parameterNodeTypes: new Set(['formal_parameter', 'spread_parameter', 'receiver_parameter']),
34
+ bindingNodeTypes: new Set(['variable_declarator']),
35
+ assignmentNodeTypes: new Set(['assignment_expression']),
36
+ identifierNodeTypes: new Set(['identifier', 'type_identifier']),
37
+ callableReferenceNodeTypes: new Set(['method_reference']),
38
+ // java.util.function SAM names, MINUS 'get' and 'test': those two collide
39
+ // with ubiquitous non-functional APIs (Map/List/Optional/Future.get,
40
+ // Predicate-unrelated test methods), emitting a spurious callable-object
41
+ // invoke fact for every container access (#2522 review). Supplier.get /
42
+ // Predicate.test dispatch is deliberately traded away until the check can
43
+ // gate on the receiver's declared type.
44
+ callableProtocolMethods: new Set(['run', 'apply', 'accept', 'call']),
45
+ normalizeQualifiedName: (raw) => raw.replaceAll('::', '.'),
46
+ };
47
+ /** Visibility of a local type begins at its declaration and ends with its
48
+ * immediately enclosing block (JLS 6.3). A Java-only synthetic Block scope
49
+ * models that range without changing shared resolver selection semantics. */
50
+ function javaLocalTypeVisibilityScope(node) {
51
+ const container = (0, ast_helpers_js_1.javaLocalTypeDeclarationContainer)(node);
52
+ if (container === null)
53
+ return undefined;
54
+ return {
55
+ '@scope.block': {
56
+ name: '@scope.block',
57
+ range: {
58
+ startLine: node.startPosition.row + 1,
59
+ startCol: node.startPosition.column,
60
+ endLine: container.endPosition.row + 1,
61
+ endCol: container.endPosition.column,
62
+ },
63
+ text: node.text,
64
+ },
65
+ };
66
+ }
67
+ /** Suppress read.member emissions when the field_access is already
68
+ * covered by a method_invocation (object of a call) or an
69
+ * assignment_expression (write target). */
70
+ function shouldEmitReadMember(memberNode) {
71
+ const parent = memberNode.parent;
72
+ if (parent === null)
73
+ return true;
74
+ switch (parent.type) {
75
+ case 'assignment_expression':
76
+ return parent.childForFieldName('left')?.id !== memberNode.id;
77
+ default:
78
+ return true;
79
+ }
80
+ }
81
+ function emitJavaScopeCaptures(sourceText, filePath, cachedTree) {
82
+ let tree = cachedTree;
83
+ if (tree === undefined) {
84
+ tree = (0, safe_parse_js_1.parseSourceSafe)((0, query_js_1.getJavaParser)(), sourceText, undefined, {
85
+ bufferSize: (0, constants_js_1.getTreeSitterBufferSize)(sourceText),
86
+ });
87
+ (0, cache_stats_js_1.recordCacheMiss)();
88
+ }
89
+ else {
90
+ (0, cache_stats_js_1.recordCacheHit)();
91
+ }
92
+ (0, package_facts_js_1.captureJavaPackageFact)(filePath, tree.rootNode);
93
+ const rawMatches = (0, query_js_1.getJavaScopeQuery)().matches(tree.rootNode);
94
+ const out = [];
95
+ const classAnnotations = new Map();
96
+ const springAopFacts = [];
97
+ const springAopTypeNodeIds = new Set();
98
+ const springConditionalFacts = [];
99
+ const springDiFacts = [];
100
+ const springDiClassNodeIds = new Set();
101
+ for (const m of rawMatches) {
102
+ const grouped = {};
103
+ // Parallel tag -> captured SyntaxNode map. The tree-sitter query already
104
+ // hands us each matched node as `c.node`, so anchors resolve via a
105
+ // type-guarded lookup (`nodeIfType`) instead of re-deriving them with
106
+ // `findNodeAtRange(tree.rootNode, ...)` per match — the
107
+ // O(matches × rootChildren) root-walk fixed for go #1848 / python #1918 /
108
+ // rust/csharp #1915, mirrored here for java (#1951). Every Java scope-query
109
+ // anchor below captures directly ON the node the old root-walk re-derived
110
+ // (verified against JAVA_SCOPE_QUERY in query.ts), so the type check is exact.
111
+ const nodeMap = {};
112
+ for (const c of m.captures) {
113
+ const tag = '@' + c.name;
114
+ grouped[tag] = (0, ast_helpers_js_1.nodeToCapture)(tag, c.node);
115
+ nodeMap[tag] = c.node;
116
+ }
117
+ if (Object.keys(grouped).length === 0)
118
+ continue;
119
+ const springAopTypeNode = [
120
+ (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'class_declaration'),
121
+ (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'interface_declaration'),
122
+ ].find((node) => node !== null);
123
+ if (springAopTypeNode !== undefined && !springAopTypeNodeIds.has(springAopTypeNode.id)) {
124
+ springAopTypeNodeIds.add(springAopTypeNode.id);
125
+ springAopFacts.push(...(0, spring_aop_js_1.captureJavaSpringAopFacts)(springAopTypeNode, filePath));
126
+ }
127
+ const springDiClassNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'class_declaration');
128
+ if (springDiClassNode !== null && !springDiClassNodeIds.has(springDiClassNode.id)) {
129
+ springDiClassNodeIds.add(springDiClassNode.id);
130
+ springConditionalFacts.push(...(0, spring_conditionals_js_1.captureJavaSpringConditionalFacts)(springDiClassNode, filePath));
131
+ const fact = (0, spring_di_js_1.captureJavaSpringDiClassFact)(springDiClassNode, filePath);
132
+ if (fact !== null)
133
+ springDiFacts.push(fact);
134
+ }
135
+ const annotatedClass = grouped['@class-annotation.class'];
136
+ const annotationName = grouped['@class-annotation.name'];
137
+ if (annotatedClass !== undefined && annotationName !== undefined) {
138
+ (0, bean_candidates_js_1.recordClassAnnotationCapture)(classAnnotations, filePath, annotatedClass, annotationName.text);
139
+ continue;
140
+ }
141
+ const typeDeclaration = [
142
+ nodeMap['@declaration.class'],
143
+ nodeMap['@declaration.enum'],
144
+ nodeMap['@declaration.record'],
145
+ nodeMap['@declaration.interface'],
146
+ ].find((node) => node !== undefined);
147
+ const localTypeIdentity = typeDeclaration === undefined ? undefined : (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(typeDeclaration);
148
+ if (localTypeIdentity?.bindingName !== undefined &&
149
+ grouped['@declaration.name'] !== undefined &&
150
+ typeDeclaration !== undefined) {
151
+ grouped['@declaration.binding-name'] = grouped['@declaration.name'];
152
+ grouped['@declaration.name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', typeDeclaration, localTypeIdentity.name);
153
+ const visibilityScope = javaLocalTypeVisibilityScope(typeDeclaration);
154
+ if (visibilityScope !== undefined)
155
+ out.push(visibilityScope);
156
+ }
157
+ // Decompose each `import_declaration`. `@import.statement` is captured
158
+ // directly on the `import_declaration` node.
159
+ if (grouped['@import.statement'] !== undefined) {
160
+ const stmtNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@import.statement'], 'import_declaration');
161
+ if (stmtNode !== null) {
162
+ const decomposed = (0, import_decomposer_js_1.splitImportDeclaration)(stmtNode);
163
+ if (decomposed !== null) {
164
+ out.push(decomposed);
165
+ continue;
166
+ }
167
+ }
168
+ // Structural receiver chain for a call whose receiver is itself an
169
+ // expression, so resolution can type it by folding over structure
170
+ // instead of re-parsing the receiver's source text. Self-gating: a
171
+ // non-call match, an absent receiver, or a chain with no nameable base
172
+ // all leave `grouped` untouched.
173
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
174
+ out.push(grouped);
175
+ continue;
176
+ }
177
+ // Skip free-call matches that are actually member calls. The query
178
+ // matches ALL method_invocations as @reference.call.free (without
179
+ // negation) because tree-sitter-java's query engine drops !object
180
+ // patterns when a positive object: pattern exists for the same node
181
+ // type. Filter here: if the match has @reference.call.free but also
182
+ // has @reference.receiver, it's a member call — skip the free match
183
+ // (the separate @reference.call.member match covers it).
184
+ if (grouped['@reference.call.free'] !== undefined &&
185
+ grouped['@reference.receiver'] !== undefined) {
186
+ continue;
187
+ }
188
+ // Normalize a `new`-expression receiver to its constructed type's simple
189
+ // name: `new Local().inner()` binds the WHOLE `object_creation_expression`
190
+ // as `@reference.receiver`, so its raw text is `"new Local()"` — a string
191
+ // that can never match a scope binding, so the compound-receiver resolver
192
+ // silently falls through to name-only fallback resolution and picks the
193
+ // wrong same-named method on a collision (#2564). Rewriting the text to
194
+ // just `Local` lets Case 2 (class-name / static receiver) in
195
+ // receiver-bound-calls.ts resolve it via its normal MRO walk. Mirrors the
196
+ // established `normalizePhpReceiver` precedent (php/captures.ts) — a
197
+ // language-local capture rewrite, no shared-pipeline change.
198
+ if (grouped['@reference.receiver'] !== undefined) {
199
+ const receiverNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@reference.receiver'], 'object_creation_expression');
200
+ const typeNode = receiverNode?.childForFieldName('type');
201
+ const simpleName = typeNode ? javaBaseSimpleNameOf(typeNode) : undefined;
202
+ if (simpleName !== undefined) {
203
+ grouped['@reference.receiver'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.receiver', receiverNode, simpleName);
204
+ }
205
+ }
206
+ // Filter read.member when it's a child of method_invocation or assignment.
207
+ // `@reference.read.member` is captured directly on the `field_access` node.
208
+ if (grouped['@reference.read.member'] !== undefined) {
209
+ const memberNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@reference.read.member'], 'field_access');
210
+ if (memberNode === null || !shouldEmitReadMember(memberNode)) {
211
+ continue;
212
+ }
213
+ }
214
+ // Synthesize `this` / `super` receiver type-bindings on every
215
+ // instance method-like.
216
+ if (grouped['@scope.function'] !== undefined) {
217
+ // Structural receiver chain for a call whose receiver is itself an
218
+ // expression, so resolution can type it by folding over structure
219
+ // instead of re-parsing the receiver's source text. Self-gating: a
220
+ // non-call match, an absent receiver, or a chain with no nameable base
221
+ // all leave `grouped` untouched.
222
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
223
+ out.push(grouped);
224
+ // `@scope.function` is captured directly on the method/constructor node.
225
+ const fnNode = findFunctionNode(nodeMap['@scope.function']);
226
+ if (fnNode !== null) {
227
+ for (const synth of (0, receiver_binding_js_1.synthesizeJavaReceiverBinding)(fnNode)) {
228
+ out.push(synth);
229
+ }
230
+ }
231
+ continue;
232
+ }
233
+ // Synthesize arity metadata on function-like declarations.
234
+ const declTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
235
+ if (declTag !== undefined) {
236
+ // FUNCTION_DECL_TAGS (@declaration.method/.constructor) are captured
237
+ // directly on the method/constructor node.
238
+ const fnNode = findFunctionNode(nodeMap[declTag]);
239
+ if (fnNode !== null) {
240
+ const arity = (0, arity_metadata_js_1.computeJavaArityMetadata)(fnNode);
241
+ if (arity.parameterCount !== undefined) {
242
+ grouped['@declaration.parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-count', fnNode, String(arity.parameterCount));
243
+ }
244
+ if (arity.requiredParameterCount !== undefined) {
245
+ grouped['@declaration.required-parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.required-parameter-count', fnNode, String(arity.requiredParameterCount));
246
+ }
247
+ if (arity.parameterTypes !== undefined) {
248
+ grouped['@declaration.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
249
+ }
250
+ }
251
+ }
252
+ // Synthesize `@reference.arity` on every callsite.
253
+ const callTag = ['@reference.call.free', '@reference.call.member', '@reference.call.constructor'].find((t) => grouped[t] !== undefined);
254
+ if (callTag !== undefined && grouped['@reference.arity'] === undefined) {
255
+ // @reference.call.free/.member are captured on the `method_invocation`;
256
+ // @reference.call.constructor on the `object_creation_expression`. The
257
+ // captured node IS the call node the old findNodeAtRange re-derived.
258
+ const callNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap[callTag], 'method_invocation', 'object_creation_expression');
259
+ if (callNode !== null) {
260
+ const argList = callNode.childForFieldName('arguments');
261
+ // Exclude interleaved comments — tree-sitter-java emits `block_comment` /
262
+ // `line_comment` as named children of argument_list, which would inflate
263
+ // arity (and arity feeds call-processor symbol-ID generation). #1920
264
+ const args = argList === null
265
+ ? []
266
+ : argList.namedChildren.filter((c) => c !== null && c.type !== 'block_comment' && c.type !== 'line_comment');
267
+ grouped['@reference.arity'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', callNode, String(args.length));
268
+ const argTypes = args.map((arg) => inferArgType(arg));
269
+ grouped['@reference.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.parameter-types', callNode, JSON.stringify(argTypes));
270
+ const argNames = args.map((a) => (a.type === 'identifier' ? a.text : ''));
271
+ if (argNames.some((n) => n !== '')) {
272
+ grouped['@reference.arg-names'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arg-names', callNode, JSON.stringify(argNames));
273
+ }
274
+ }
275
+ }
276
+ // Structural receiver chain for a call whose receiver is itself an
277
+ // expression, so resolution can type it by folding over structure
278
+ // instead of re-parsing the receiver's source text. Self-gating: a
279
+ // non-call match, an absent receiver, or a chain with no nameable base
280
+ // all leave `grouped` untouched.
281
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
282
+ out.push(grouped);
283
+ }
284
+ (0, capture_side_channel_js_1.setJavaClassAnnotationFacts)(filePath, (0, bean_candidates_js_1.materializeClassAnnotationFacts)(classAnnotations));
285
+ (0, capture_side_channel_js_1.setJavaSpringConfigConsumerFacts)(filePath, (0, spring_config_bindings_js_1.captureJavaSpringConfigConsumerFacts)(tree.rootNode, filePath));
286
+ (0, capture_side_channel_js_1.setJavaSpringAopFacts)(filePath, springAopFacts);
287
+ (0, capture_side_channel_js_1.setJavaSpringConditionalFacts)(filePath, springConditionalFacts);
288
+ (0, capture_side_channel_js_1.setJavaSpringDiFacts)(filePath, springDiFacts);
289
+ return [
290
+ ...resolveVarTypeBindings(out),
291
+ ...synthesizeJavaInheritanceReferences(tree.rootNode),
292
+ ...synthesizeJavaExplicitConstructorReferences(tree.rootNode),
293
+ ...synthesizeJavaAnonymousClassDeclarations(tree.rootNode),
294
+ ...(0, callable_flow_captures_js_1.synthesizeCallableFlowCaptures)(tree.rootNode, JAVA_CALLABLE_CAPTURE_OPTIONS),
295
+ ];
296
+ }
297
+ /**
298
+ * Synthesize `@declaration.class` matches for anonymous class bodies
299
+ * (`new Runnable() { ... }`), named by the same javac-compatible authority
300
+ * (`synthesizeJavaTypeIdentity` → `Worker$N`) the structure phase
301
+ * uses — the two layers agree by construction (#2550).
302
+ *
303
+ * The anchor is the `class_body` node: it shares its range with the
304
+ * `(object_creation_expression (class_body) @scope.class)` scope rule in
305
+ * query.ts, so the def is owned by that Class scope's `ownedDefs`
306
+ * (making `populateClassOwnedMembers` stamp `ownerId` on the anonymous
307
+ * class's methods) and the name auto-hoists to the enclosing scope —
308
+ * exactly the binding shape a named class declaration produces.
309
+ */
310
+ function synthesizeJavaAnonymousClassDeclarations(rootNode) {
311
+ const out = [];
312
+ for (const oce of rootNode.descendantsOfType('object_creation_expression')) {
313
+ const identity = (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(oce);
314
+ if (identity === undefined)
315
+ continue;
316
+ const body = oce.namedChildren.find((c) => c.type === 'class_body');
317
+ if (body === undefined)
318
+ continue;
319
+ out.push({
320
+ '@declaration.class': (0, ast_helpers_js_1.nodeToCapture)('@declaration.class', body),
321
+ '@declaration.name': (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', body, identity.name),
322
+ });
323
+ // Inheritance: the anonymous class extends/implements its constructed
324
+ // type. Anchor the `@reference.inherits` on the `class_body` — its
325
+ // range equals the anonymous Class scope, so the reference site's
326
+ // enclosing class resolves to the SYNTHESIZED `Worker$N` def (anchoring
327
+ // on the constructed-type node would sit OUTSIDE the anonymous scope
328
+ // and mis-attribute the edge to the lexically enclosing class). The
329
+ // synthetic `@reference.name` carries the base's simple name; a JDK
330
+ // type with no repo def simply resolves to nothing (no edge). Without
331
+ // this edge `mroFor(Worker$N)` is empty and the #2550 instance-
332
+ // ownership gate suppressed TRUE bare calls to inherited methods
333
+ // inside the anonymous body (empirically caught in review).
334
+ const constructedType = oce.childForFieldName?.('type');
335
+ const baseSimpleName = constructedType !== null && constructedType !== undefined
336
+ ? javaBaseSimpleNameOf(constructedType)
337
+ : undefined;
338
+ if (baseSimpleName !== undefined) {
339
+ out.push({
340
+ '@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', body),
341
+ '@reference.name': (0, ast_helpers_js_1.syntheticCapture)('@reference.name', body, baseSimpleName),
342
+ });
343
+ }
344
+ // Receiver typeBinding: `Runnable handler = new Runnable() { ... }`
345
+ // binds `handler` to the ANONYMOUS class (`Worker$1`), not the declared
346
+ // interface — the instance is what `handler.run()` dispatches into, and
347
+ // the declared type is frequently a JDK interface with no repo def.
348
+ // Appended after the raw matches, so it overwrites the declared-type
349
+ // binding the `@type-binding.annotation` query rule produced for the
350
+ // same variable (pass-4 applies bindings in match order; last wins).
351
+ const declarator = oce.parent;
352
+ if (declarator !== null && declarator.type === 'variable_declarator') {
353
+ const varName = declarator.childForFieldName?.('name');
354
+ const declNode = declarator.parent ?? declarator;
355
+ if (varName !== null && varName !== undefined) {
356
+ out.push({
357
+ '@type-binding.annotation': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.annotation', declNode),
358
+ '@type-binding.name': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.name', varName),
359
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', oce, identity.name),
360
+ });
361
+ }
362
+ }
363
+ }
364
+ // Enum constant bodies (`enum E { A { ... } }`) — javac's other
365
+ // anonymous shape (#2555). Same synthesis, same body anchor; the
366
+ // constant's class extends its HOST ENUM (javac semantics), so the
367
+ // inherits reference names the enum — giving `mroFor(E$N) ∋ E` and
368
+ // keeping bare calls from the body to the enum's own helpers alive
369
+ // through the ownership gate's MRO arm.
370
+ for (const constant of rootNode.descendantsOfType('enum_constant')) {
371
+ const hostEnum = javaEnclosingEnumNameOf(constant);
372
+ const bodyNode = constant.childForFieldName?.('body');
373
+ const isBodied = bodyNode !== null && bodyNode !== undefined && bodyNode.type === 'class_body';
374
+ const bodiedIdentity = (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(constant);
375
+ if (bodiedIdentity !== undefined && isBodied) {
376
+ out.push({
377
+ '@declaration.class': (0, ast_helpers_js_1.nodeToCapture)('@declaration.class', bodyNode),
378
+ '@declaration.name': (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', bodyNode, bodiedIdentity.name),
379
+ });
380
+ if (hostEnum !== undefined) {
381
+ out.push({
382
+ '@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', bodyNode),
383
+ '@reference.name': (0, ast_helpers_js_1.syntheticCapture)('@reference.name', bodyNode, hostEnum),
384
+ });
385
+ }
386
+ }
387
+ // Receiver dispatch (#2561): `E.CONST.method()` resolves through the
388
+ // generic compound-receiver chain walk, which looks up each dotted
389
+ // segment via the owning class scope's `typeBindings` map — the same
390
+ // mechanism a field declaration uses (`private User user;` binds
391
+ // `user` on the class scope). Binding the constant's own simple name
392
+ // there — to its synthesized `E$N` class when bodied (MRO includes E,
393
+ // so members inherited from the enum still resolve), or to the host
394
+ // enum itself when body-less — makes `E.CONST.method()` resolve with
395
+ // no changes to the shared receiver-binding machinery.
396
+ //
397
+ // A bodied constant binds ONLY to its `E$N` class, never the host enum:
398
+ // if name synthesis fails on a malformed/error-recovery tree (`bodiedName`
399
+ // undefined despite a real body), emit nothing rather than silently
400
+ // misattributing an OVERRIDING constant's receiver to the enum's own
401
+ // (non-overridden) method — a wrong edge is worse than no edge. Mirrors
402
+ // the `object_creation_expression` branch, which skips on synthesis
403
+ // failure. `hostEnum` is used only for genuinely body-less constants.
404
+ const constantNameNode = constant.childForFieldName?.('name');
405
+ const constantType = isBodied ? bodiedIdentity?.name : hostEnum;
406
+ if (constantNameNode !== null && constantNameNode !== undefined && constantType !== undefined) {
407
+ out.push({
408
+ '@type-binding.annotation': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.annotation', constant),
409
+ '@type-binding.name': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.name', constantNameNode),
410
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', constant, constantType),
411
+ });
412
+ }
413
+ }
414
+ return out;
415
+ }
416
+ /** Simple name of the enum_declaration enclosing an enum_constant, or
417
+ * undefined (grammar guarantees one exists in well-formed source). */
418
+ function javaEnclosingEnumNameOf(constant) {
419
+ let cursor = constant.parent;
420
+ while (cursor !== null) {
421
+ if (cursor.type === 'enum_declaration') {
422
+ return cursor.childForFieldName?.('name')?.text ?? undefined;
423
+ }
424
+ cursor = cursor.parent;
425
+ }
426
+ return undefined;
427
+ }
428
+ /**
429
+ * Synthesize `@reference.call.constructor` captures for explicit constructor
430
+ * invocations — `super(...)` and `this(...)` (F38 #1928). tree-sitter-java
431
+ * models these as `explicit_constructor_invocation` nodes, which the scope
432
+ * query does not match, so the chained-constructor CALLS edges (subclass ctor →
433
+ * superclass ctor; ctor → sibling overload) were silently dropped.
434
+ *
435
+ * The grammar gives no constructor *name* at the call site (the child is a bare
436
+ * `(super)` / `(this)` token), so the target name is resolved structurally:
437
+ * - `this(...)` → the enclosing type's own simple name (constructor symbols
438
+ * are keyed by the declaring class name).
439
+ * - `super(...)` → the enclosing class's superclass simple-name tail (reusing
440
+ * `javaBaseLookupNameNode` so qualified/generic supers reduce
441
+ * to the bare class name, matching the EXTENDS synth). An
442
+ * implicit `Object` super (no `superclass` field) has no
443
+ * in-graph symbol, so it is skipped rather than emitting a
444
+ * dangling reference.
445
+ * Arity is attached so overloaded constructors disambiguate downstream, mirroring
446
+ * the call-site arity synthesized for `new X(...)`.
447
+ */
448
+ function synthesizeJavaExplicitConstructorReferences(root) {
449
+ const out = [];
450
+ const stack = [root];
451
+ while (stack.length > 0) {
452
+ const node = stack.pop();
453
+ if (node.type === 'explicit_constructor_invocation') {
454
+ emitJavaExplicitConstructorRef(out, node);
455
+ }
456
+ for (let i = 0; i < node.namedChildCount; i++) {
457
+ const child = node.namedChild(i);
458
+ if (child !== null)
459
+ stack.push(child);
460
+ }
461
+ }
462
+ return out;
463
+ }
464
+ const TYPE_DECL_NODE_TYPES = new Set([
465
+ 'class_declaration',
466
+ 'enum_declaration',
467
+ 'record_declaration',
468
+ ]);
469
+ function emitJavaExplicitConstructorRef(out, node) {
470
+ const ctor = node.childForFieldName('constructor');
471
+ if (ctor === null)
472
+ return;
473
+ const enclosingType = findEnclosingTypeDeclaration(node);
474
+ if (enclosingType === null)
475
+ return;
476
+ let targetNameNode = null;
477
+ if (ctor.type === 'this') {
478
+ targetNameNode = enclosingType.childForFieldName('name');
479
+ }
480
+ else if (ctor.type === 'super') {
481
+ // Only class_declaration carries a `superclass` field; enum/record cannot
482
+ // declare an explicit superclass, so `super(...)` there has no resolvable
483
+ // target symbol.
484
+ const superclass = enclosingType.childForFieldName('superclass');
485
+ if (superclass === null)
486
+ return;
487
+ for (const base of superclass.namedChildren) {
488
+ if (base === null)
489
+ continue;
490
+ const nameNode = javaBaseLookupNameNode(base);
491
+ if (nameNode !== null) {
492
+ targetNameNode = nameNode;
493
+ break;
494
+ }
495
+ }
496
+ }
497
+ if (targetNameNode === null)
498
+ return;
499
+ const argList = node.childForFieldName('arguments');
500
+ const args = argList === null
501
+ ? []
502
+ : argList.namedChildren.filter((c) => c !== null && c.type !== 'block_comment' && c.type !== 'line_comment');
503
+ out.push({
504
+ '@reference.call.constructor': (0, ast_helpers_js_1.nodeToCapture)('@reference.call.constructor', node),
505
+ '@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', targetNameNode),
506
+ '@reference.arity': (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', node, String(args.length)),
507
+ });
508
+ }
509
+ function findEnclosingTypeDeclaration(node) {
510
+ let cur = node.parent;
511
+ while (cur !== null) {
512
+ if (TYPE_DECL_NODE_TYPES.has(cur.type))
513
+ return cur;
514
+ cur = cur.parent;
515
+ }
516
+ return null;
517
+ }
518
+ /**
519
+ * Synthesize `@reference.inherits` captures from Java class heritage so the
520
+ * registry-primary scope-resolution path emits EXTENDS / IMPLEMENTS edges
521
+ * (mirrors C++ `emitCppInheritanceCaptures`). Without this, Java inheritance
522
+ * edges came only from the legacy heritage-capture leg (removed in #942), which
523
+ * is dropped for registry-primary languages in the worker pipeline (issue #1951).
524
+ *
525
+ * Scope covers `class_declaration` (`superclass` extends + `interfaces`
526
+ * implements clauses) AND `interface_declaration` (`extends_interfaces` →
527
+ * interface-to-interface EXTENDS), matching the legacy Java heritage query
528
+ * (tree-sitter-queries.ts), which has a dedicated `interface_declaration
529
+ * (extends_interfaces (type_list …))` arm. Without the interface arm the
530
+ * registry-primary synth silently dropped every `interface IA extends IB`
531
+ * edge while the legacy leg emitted it — the exact =0/=N parity break #1951
532
+ * targets. Enum/record heritage stays unemitted (no legacy arm). Generic
533
+ * bases (`extends Box<T>`, `implements IFoo<T>`) ARE emitted here: the legacy
534
+ * heritage query was widened to capture the inner `type_identifier` of a
535
+ * `generic_type` (tree-sitter-queries.ts), so both paths now agree on SIMPLE
536
+ * (unqualified) generic bases — the more-correct behavior, consistent with
537
+ * C#/Rust (#1951). Qualified bases (`a.b.Base`, `a.b.Box<T>`, `a.b.IFoo<T>`) are
538
+ * ALSO now at parity (#1956 tri-review U2): the synth resolves them by their
539
+ * `scoped_type_identifier` tail, and the legacy heritage query was widened
540
+ * with matching `scoped_type_identifier` arms (plain + generic-wrapped). The
541
+ * EXTENDS-vs-IMPLEMENTS split is decided downstream from the resolved target's
542
+ * symbol kind (`preEmitInheritanceEdges`): a superclass resolves to a class
543
+ * (EXTENDS), an implemented interface resolves to an interface (IMPLEMENTS).
544
+ * An `interface IA extends IB` base resolves to an Interface too, so it is
545
+ * emitted as IMPLEMENTS — matching the legacy `interface_declaration` arm,
546
+ * which tagged the bases as implements (`kind: 'implements'`) and likewise
547
+ * resolves them as interfaces. The synth therefore does not need to know the
548
+ * declaration's own kind; it only emits inherits sites and lets the resolved
549
+ * target decide the edge type.
550
+ * Base names are normalized to their bare simple identifier (`Box<T>` → `Box`,
551
+ * `java.io.Serializable` → `Serializable`) to match the V1 simple-name
552
+ * `findClassBindingInScope` contract.
553
+ */
554
+ function synthesizeJavaInheritanceReferences(root) {
555
+ const out = [];
556
+ const stack = [root];
557
+ while (stack.length > 0) {
558
+ const node = stack.pop();
559
+ if (node.type === 'class_declaration') {
560
+ const superclass = node.childForFieldName('superclass');
561
+ if (superclass !== null) {
562
+ for (const base of superclass.namedChildren)
563
+ emitJavaInheritanceBase(out, base);
564
+ }
565
+ const interfaces = node.childForFieldName('interfaces');
566
+ if (interfaces !== null) {
567
+ for (const typeList of interfaces.namedChildren) {
568
+ if (typeList === null || typeList.type !== 'type_list')
569
+ continue;
570
+ for (const base of typeList.namedChildren)
571
+ emitJavaInheritanceBase(out, base);
572
+ }
573
+ }
574
+ }
575
+ else if (node.type === 'interface_declaration') {
576
+ // `interface IA extends IB, IC<T>` — the `extends_interfaces` clause is
577
+ // NOT exposed via a tree-sitter field (unlike a class's `superclass` /
578
+ // `interfaces`), so scan named children for it. It wraps a `type_list`
579
+ // whose bases reuse `javaBaseLookupNameNode` (handles type_identifier /
580
+ // generic_type / scoped_type_identifier). These resolve to Interface
581
+ // targets, so `preEmitInheritanceEdges` emits them as IMPLEMENTS, at
582
+ // parity with the legacy `interface_declaration` implements arm.
583
+ for (let i = 0; i < node.namedChildCount; i++) {
584
+ const extendsInterfaces = node.namedChild(i);
585
+ if (extendsInterfaces === null || extendsInterfaces.type !== 'extends_interfaces')
586
+ continue;
587
+ for (const typeList of extendsInterfaces.namedChildren) {
588
+ if (typeList === null || typeList.type !== 'type_list')
589
+ continue;
590
+ for (const base of typeList.namedChildren)
591
+ emitJavaInheritanceBase(out, base);
592
+ }
593
+ }
594
+ }
595
+ // Named children only: every type/heritage node we care about is named,
596
+ // so skipping unnamed punctuation tokens keeps the walk single-pass and
597
+ // lighter on large files.
598
+ for (let i = 0; i < node.namedChildCount; i++) {
599
+ const child = node.namedChild(i);
600
+ if (child !== null)
601
+ stack.push(child);
602
+ }
603
+ }
604
+ return out;
605
+ }
606
+ function emitJavaInheritanceBase(out, base) {
607
+ if (base === null)
608
+ return;
609
+ const nameNode = javaBaseLookupNameNode(base);
610
+ if (nameNode === null)
611
+ return;
612
+ out.push({
613
+ '@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', base),
614
+ '@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', nameNode),
615
+ });
616
+ }
617
+ /** Resolve a Java base-type node to its bare simple-name identifier node. */
618
+ /** Simple name of a constructed/base type node, reusing the same node
619
+ * shapes `javaBaseLookupNameNode` handles (`Runnable`, `a.b.Base`,
620
+ * `Box<T>`). Returns undefined when the node is none of those. */
621
+ function javaBaseSimpleNameOf(typeNode) {
622
+ const nameNode = javaBaseLookupNameNode(typeNode);
623
+ return nameNode === null ? undefined : nameNode.text;
624
+ }
625
+ function javaBaseLookupNameNode(node) {
626
+ switch (node.type) {
627
+ case 'type_identifier':
628
+ return node;
629
+ case 'scoped_type_identifier':
630
+ // `java.io.Serializable` → trailing `type_identifier` (`Serializable`).
631
+ return node.lastNamedChild;
632
+ case 'generic_type': {
633
+ // `Box<String>` → recurse into the base type (`Box`).
634
+ const first = node.firstNamedChild;
635
+ return first === null ? null : javaBaseLookupNameNode(first);
636
+ }
637
+ default:
638
+ return null;
639
+ }
640
+ }
641
+ function resolveVarTypeBindings(matches) {
642
+ const returnTypes = new Map();
643
+ const varTypes = new Map();
644
+ const ambiguousReturns = new Set();
645
+ const ambiguousVars = new Set();
646
+ for (const m of matches) {
647
+ if (m['@type-binding.return'] !== undefined &&
648
+ m['@type-binding.type'] !== undefined &&
649
+ m['@type-binding.name'] !== undefined) {
650
+ const name = m['@type-binding.name'].text;
651
+ const type = m['@type-binding.type'].text;
652
+ const existing = returnTypes.get(name);
653
+ if (existing !== undefined && existing !== type) {
654
+ ambiguousReturns.add(name);
655
+ returnTypes.delete(name);
656
+ }
657
+ else if (!ambiguousReturns.has(name)) {
658
+ returnTypes.set(name, type);
659
+ }
660
+ }
661
+ if (m['@type-binding.annotation'] !== undefined &&
662
+ m['@type-binding.type'] !== undefined &&
663
+ m['@type-binding.name'] !== undefined) {
664
+ const name = m['@type-binding.name'].text;
665
+ const t = m['@type-binding.type'].text;
666
+ if (t !== 'var') {
667
+ const existing = varTypes.get(name);
668
+ if (existing !== undefined && existing !== t) {
669
+ ambiguousVars.add(name);
670
+ varTypes.delete(name);
671
+ }
672
+ else if (!ambiguousVars.has(name)) {
673
+ varTypes.set(name, t);
674
+ }
675
+ }
676
+ }
677
+ if (m['@type-binding.constructor'] !== undefined &&
678
+ m['@type-binding.type'] !== undefined &&
679
+ m['@type-binding.name'] !== undefined) {
680
+ const name = m['@type-binding.name'].text;
681
+ const type = m['@type-binding.type'].text;
682
+ const existing = varTypes.get(name);
683
+ if (existing !== undefined && existing !== type) {
684
+ ambiguousVars.add(name);
685
+ varTypes.delete(name);
686
+ }
687
+ else if (!ambiguousVars.has(name)) {
688
+ varTypes.set(name, type);
689
+ }
690
+ }
691
+ }
692
+ const resolved = [];
693
+ for (const m of matches) {
694
+ if (m['@type-binding.call-result'] !== undefined && m['@type-binding.type'] !== undefined) {
695
+ const methodName = m['@type-binding.type'].text;
696
+ const resolvedType = returnTypes.get(methodName);
697
+ if (resolvedType !== undefined) {
698
+ const patched = { ...m };
699
+ patched['@type-binding.type'] = { ...m['@type-binding.type'], text: resolvedType };
700
+ patched['@type-binding.annotation'] = m['@type-binding.call-result'];
701
+ delete patched['@type-binding.call-result'];
702
+ resolved.push(patched);
703
+ continue;
704
+ }
705
+ }
706
+ if (m['@type-binding.alias'] !== undefined && m['@type-binding.type'] !== undefined) {
707
+ const sourceName = m['@type-binding.type'].text;
708
+ const resolvedType = varTypes.get(sourceName);
709
+ if (resolvedType !== undefined) {
710
+ const patched = { ...m };
711
+ patched['@type-binding.type'] = { ...m['@type-binding.type'], text: resolvedType };
712
+ patched['@type-binding.annotation'] = m['@type-binding.alias'];
713
+ delete patched['@type-binding.alias'];
714
+ resolved.push(patched);
715
+ continue;
716
+ }
717
+ }
718
+ if (m['@reference.arg-names'] !== undefined && m['@reference.parameter-types'] !== undefined) {
719
+ try {
720
+ const types = JSON.parse(m['@reference.parameter-types'].text);
721
+ const names = JSON.parse(m['@reference.arg-names'].text);
722
+ let patched = false;
723
+ for (let i = 0; i < types.length; i++) {
724
+ if (types[i] === '' && names[i] !== undefined && names[i] !== '') {
725
+ const rt = varTypes.get(names[i]);
726
+ if (rt !== undefined) {
727
+ types[i] = rt;
728
+ patched = true;
729
+ }
730
+ }
731
+ }
732
+ if (patched) {
733
+ const patchedMatch = { ...m };
734
+ patchedMatch['@reference.parameter-types'] = {
735
+ ...m['@reference.parameter-types'],
736
+ text: JSON.stringify(types),
737
+ };
738
+ delete patchedMatch['@reference.arg-names'];
739
+ resolved.push(patchedMatch);
740
+ continue;
741
+ }
742
+ }
743
+ catch {
744
+ // pass through
745
+ }
746
+ }
747
+ resolved.push(m);
748
+ }
749
+ return resolved;
750
+ }
751
+ /** Infer a Java argument's static type from literal patterns. */
752
+ function inferArgType(argNode) {
753
+ switch (argNode.type) {
754
+ case 'decimal_integer_literal':
755
+ case 'hex_integer_literal':
756
+ case 'octal_integer_literal':
757
+ case 'binary_integer_literal':
758
+ return 'int';
759
+ case 'decimal_floating_point_literal':
760
+ case 'hex_floating_point_literal':
761
+ return 'double';
762
+ case 'string_literal':
763
+ return 'String';
764
+ case 'character_literal':
765
+ return 'char';
766
+ case 'true':
767
+ case 'false':
768
+ return 'boolean';
769
+ case 'null_literal':
770
+ return 'null';
771
+ case 'object_creation_expression': {
772
+ const typeNode = argNode.childForFieldName('type');
773
+ return typeNode?.text ?? '';
774
+ }
775
+ default:
776
+ return '';
777
+ }
778
+ }
779
+ /**
780
+ * Resolve a Java function-like node from a query-captured node.
781
+ *
782
+ * The `@scope.function` / `@declaration.method` / `@declaration.constructor`
783
+ * anchors all capture directly on the `method_declaration` /
784
+ * `constructor_declaration` node (per JAVA_SCOPE_QUERY), so this is a type
785
+ * guard against `FUNCTION_NODE_TYPES` — the threaded-node equivalent of the
786
+ * old `findNodeAtRange(tree.rootNode, range, type)` root-walk, minus the
787
+ * O(matches × rootChildren) traversal.
788
+ */
789
+ function findFunctionNode(node) {
790
+ return (0, ast_helpers_js_1.nodeIfType)(node, ...FUNCTION_NODE_TYPES);
791
+ }