| 1780 | /* ── Call-edge resolution ─────────────────────────────────────────── */ |
| 1781 | |
| 1782 | static void java_emit_resolved_orig(JavaLSPContext *ctx, const char *callee_qn, const char *orig, |
| 1783 | const char *strategy, float confidence) { |
| 1784 | if (!ctx->resolved_calls || !ctx->enclosing_method_qn || !callee_qn) |
| 1785 | return; |
| 1786 | CBMResolvedCall rc; |
| 1787 | rc.caller_qn = ctx->enclosing_method_qn; |
| 1788 | rc.callee_qn = callee_qn; |
| 1789 | rc.strategy = strategy; |
| 1790 | rc.confidence = confidence; |
| 1791 | // For a data-flow resolution (constructor reference `Lhs::new` resolved to |
| 1792 | // the Lhs class), `reason` carries the ORIGINAL textual callee (`new`) so the |
| 1793 | // pipeline join can match the textual call site even though the resolved |
| 1794 | // callee_qn's short name differs. NULL/unread for normal resolved calls. |
| 1795 | rc.reason = orig; |
| 1796 | cbm_resolvedcall_push(ctx->resolved_calls, ctx->arena, rc); |
| 1797 | } |
| 1798 | |
| 1799 | static void java_emit_resolved(JavaLSPContext *ctx, const char *callee_qn, const char *strategy, |
| 1800 | float confidence) { |
no test coverage detected