Class ConcurrentEntryPointPropagator

java.lang.Object
org.ek9lang.compiler.phase5.ConcurrentEntryPointPropagator

final class ConcurrentEntryPointPropagator extends Object
Propagates the 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 — MarkMethodsAsConcurrentEntryPoint applied to service operations.
  • Step 5 — ConcurrentEntryPointMarker applied 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 Details

    • ConcurrentEntryPointPropagator

      ConcurrentEntryPointPropagator(CallGraph callGraph)
  • Method Details

    • propagate

      void propagate()