Class ConcurrentEntryPointPropagator
CONCURRENT_ENTRY_POINT = "TRUE" squirrelled marker transitively
along the call graph (Step 6b, slice 1).
After CallGraphCollector has populated the call graph, this pass starts from
every callable already carrying the marker — the direct roots set by:
- Step 6 —
MarkMethodsAsConcurrentEntryPointapplied to service operations. - Step 5 —
ConcurrentEntryPointMarkerapplied to TCP/Signals handlers and async stream-stage functions.
It then computes the set of all callables reachable from those roots via outgoing call edges and sets the marker on each. Constructors and operators are excluded — they're handled by the constructor exemption (E08250 prevents publication-during-construction) and the synthesised-operator path respectively.
Why reachability, not blanket class-level marking: a Component used only from a single-threaded program is not racy. The marker propagates only along ACTUAL call graph edges, so unused or single-threaded components stay unmarked and Step 7's data-race check never fires on them.
Output is consumed by the phase-5 data-race check (E08251, Step 7).
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
ConcurrentEntryPointPropagator
ConcurrentEntryPointPropagator(CallGraph callGraph)
-
-
Method Details
-
propagate
void propagate()
-