| 723 | } |
| 724 | |
| 725 | static void extract_channels_java(CBMExtractCtx *ctx) { |
| 726 | TSNodeStack stack; |
| 727 | ts_nstack_init(&stack, ctx->arena, CHAN_STACK_CAP); |
| 728 | ts_nstack_push(&stack, ctx->arena, ctx->root); |
| 729 | |
| 730 | while (stack.count > 0) { |
| 731 | TSNode node = ts_nstack_pop(&stack); |
| 732 | const char *kind = ts_node_type(node); |
| 733 | if (strcmp(kind, "method_invocation") == 0) { |
| 734 | java_process_call(ctx, node); |
| 735 | } else if (strcmp(kind, "marker_annotation") == 0 || strcmp(kind, "annotation") == 0) { |
| 736 | java_process_annotation(ctx, node); |
| 737 | } |
| 738 | uint32_t count = ts_node_child_count(node); |
| 739 | for (int i = (int)count - SKIP_ONE; i >= 0; i--) { |
| 740 | ts_nstack_push(&stack, ctx->arena, ts_node_child(node, (uint32_t)i)); |
| 741 | } |
| 742 | } |
| 743 | } |
| 744 | |
| 745 | /* ══════════════════════════════════════════════════════════════════ |
| 746 | * C# — SignalR (Clients.All.SendAsync / Hub.On) |
no test coverage detected