Lock Supplier.get(), Runnable.run(), and call-site enum resolution to the dataflow pipeline so a parallel resolver cannot creep back in unnoticed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Delete the parallel Supplier/Runnable bridging layer and resolve functional call-site arguments via VariableTracer, PathBindingEvaluator, and JdtDataFlowModel instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
Trace execute→Runnable.run arguments via source AST and JdtDataFlowModel void side-effects, and narrow polymorphic events using domain isCorrect() predicates on rich event types.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use multi-source endpoint evidence so shared dispatchers resolve to one event per endpoint without over-linking or fail-closed AMBIGUOUS_WIDEN.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fail closed on broad enum widens so dispatchers link one event per endpoint instead of every transition on the machine.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop treating multi-source same-event triggers as ambiguous widen failures; trust bare polymorphic constant names when the machine event type is known.
Co-authored-by: Cursor <cursoragent@cursor.com>
Call-graph ambiguous metadata must not blank matchedTransitions; trust import-style polymorphic widen when the machine event type is known.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve static map field declaring types via import-aware lookup when JDT binding uses the wrong package, and cover qualified inherited maps, static factory receivers, and RequestParam expansion across modules.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix inherited static-block map expansion across compilation units by resolving superclass types from imports when binding points at the wrong package.
Co-authored-by: Cursor <cursoragent@cursor.com>
Append query parameters for @RequestParam expansion, resolve static factory map receivers and inherited static-block maps, and fail closed on instance field maps.
Co-authored-by: Cursor <cursoragent@cursor.com>
Walk superclass and interface hierarchies when locating compile-time map initializers for Map.get path binding expansion.
Co-authored-by: Cursor <cursoragent@cursor.com>
Delegate single-return static factories through nested calls and static field references with cycle detection, resolve factories without JDT bindings via receiver type lookup, and add regression coverage including sibling-module factories and fail-closed loop or recursive cases.
Co-authored-by: Cursor <cursoragent@cursor.com>
Follow one-return static factories that directly yield compile-time map literals for field initializers, static-block assignments, and putAll sources while failing closed on runtime-built maps or multiple returns.
Co-authored-by: Cursor <cursoragent@cursor.com>
Support putAll from compile-time maps inside anonymous HashMap initializers and add regression coverage for linked locals, mixed put/putAll, and empty inline HashMap fields populated in static blocks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Follow HashMap locals assigned to static route fields and direct Map.of or double-brace assignments inside static initializers while ignoring unlinked local puts and failing closed on computed keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve compile-time keys from anonymous subclass instance initializers used for inline route maps while remaining fail-closed when any put key is computed.
Co-authored-by: Cursor <cursoragent@cursor.com>
When a static map field is populated in a static block via put calls with compile-time string keys, expand endpoint path parameters through those entries while remaining fail-closed for computed keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lock in cross-class, static-import, reversed-equals, sibling-module, and fail-closed static-initializer map behavior for commandKey and machineType expansion.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve ORDER.equals(machineType) and Objects.equals(CONST, param) by reusing compile-time static final string constant folding for both equals sides.
Co-authored-by: Cursor <cursoragent@cursor.com>
Follow one-hop static final indirection for Map.of keys and switch case labels so route constants can alias literals without losing fail-closed behavior on cycles or computed values.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve Map.of keys through compile-time static final String fields so route tables can use named constants while still failing closed on computed or non-static keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Follow import static CommandRoutes.ROUTES to the declaring type when proving Map.get keys, and add regression coverage for switch expressions, sibling-module routes, FQN lookups, and fail-closed non-literal map keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve Routes.ROUTES-style QualifiedName receivers and Map.ofEntries initializers so commandKey expansion works for typical route-table dispatch patterns.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prove commandKey variants from compile-time Map.of routes instead of failing closed when dispatch uses map lookup rather than switch or enum valueOf.
Co-authored-by: Cursor <cursoragent@cursor.com>
Recursively peel predicate chains like matchesOrder -> isOrderKey(normalize(raw)) when extracting if-chain literals and inlining branch constraints, with regression tests for static-import, multi-module, and nested forms.
Co-authored-by: Cursor <cursoragent@cursor.com>
Recognize single-literal equals predicates in if-chains, inline them (including negated else-if constraints) for branch compatibility, skip traversing into predicate helpers during alias walks, and fail closed when a path variable cannot be proven.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expand machineType routing when dispatchers use java.util.Objects.equals with helper-wrapped parameters, and evaluate those compound constraints without breaking existing receiver-equals forms.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use balanced-paren receiver-equals substitution so compound branch constraints stay correct while supporting forms like "ORDER".equalsIgnoreCase(normalizeType(machineType)).
Co-authored-by: Cursor <cursoragent@cursor.com>
When helper invocations have no receiver, look up single static imports and static star imports before giving up; add cross-package, chained-helper, and fail-closed expander regressions.
Co-authored-by: Cursor <cursoragent@cursor.com>
EntryPointBindingExpander follows single-arg normalize helpers declared on other types and accepts switch selectors wrapped by those helpers when extracting string case arms.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enum.valueOf(normalize(event)) now expands when normalize trivially forwards its parameter; add expander regression test and assert flow highlight helper in enterprise HTML export.
Co-authored-by: Cursor <cursoragent@cursor.com>
Local renames like eventCode = event or normalized = event.trim() no longer break Enum.valueOf case extraction; add multi-hop and normalization coverage in EntryPointBindingExpanderTest.
Co-authored-by: Cursor <cursoragent@cursor.com>
Structured {source, event} steps in state_machine_enterprise flows.json enable HTML flow highlighting; fix additional-state configuration in layered_dispatcher_sample and refresh enterprise golden JSON.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add FlowStep with backward-compatible JSON (strings or objects), precompute linkKey in HTML export, and document precise flow highlighting in flows.json.
Co-authored-by: Cursor <cursoragent@cursor.com>
Embed linkKey on matchedTransitions in HTML metadata so explorer highlighting uses the same SVG #link_* suffix as PlantUML, avoiding JS/Java format drift while keeping golden JSON unchanged.
Co-authored-by: Cursor <cursoragent@cursor.com>
Machine-scoped transition/state labels and polymorphic event harvesting now use context-aware canonicalizeLabel so ambiguous import-style enum names are not rewritten during export or validation.
Co-authored-by: Cursor <cursoragent@cursor.com>
Switch-arm equality now requires compatible enum types when both sides are package-qualified, while still accepting import-style vs FQN pairs like DomainCommand.ORDER_PAY.
Co-authored-by: Cursor <cursoragent@cursor.com>
requireCanonical and event matching now use context-aware enum checks so ambiguous import-style identifiers are not falsely rewritten during export validation.
Co-authored-by: Cursor <cursoragent@cursor.com>
Property placeholders on JSON re-export now qualify through applyResolution with CodebaseContext so ambiguous enum names fail closed instead of guessing without bindings.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop rewriting trigger events in TriggerPoint construction; qualify with context during property resolution and export. Upgrade heuristic simple names to JDT binding FQNs for user types only, preserving java.* platform types.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use machine event type and CodebaseContext for trusted valueOf widen checks and resolveLinkResolution, and apply context-aware enum type matching when expanding symbolic polymorphic placeholders.
Co-authored-by: Cursor <cursoragent@cursor.com>