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>
Expanded REST endpoints share the same controller method, so class/method matching grouped unrelated call chains; prefer entry point name when present and cover with enterprise HTML tests.
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>
AMBIGUOUS_WIDEN call chains with matched transitions now appear in the sidebar with an Ambiguous link badge, use dashed highlight styling, and participate in endpoint hover when link keys are available.
Co-authored-by: Cursor <cursoragent@cursor.com>
HtmlExporter now propagates event/state formats into PlantUML anchors and template.js buildLinkKey, with layered-dispatcher and fqn regression tests guarding endpoint highlight consistency.
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>
Use label-only canonicalization for shared-infrastructure triggers, resolve valueOf enum types from JDT bindings when available, and allow trusted valueOf widens using the machine event type when the trigger omits type FQNs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop rewriting polymorphic events in TriggerPoint construction without ambiguity context; canonicalize labels at link time while preserving type FQNs for shared-infrastructure routing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reject import-style polymorphic candidates when deciding whether an ambiguous valueOf widen is machine-scoped and safe to link.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop rewriting OrderEvent.PAY to the machine package when the simple name is ambiguous, and apply the same guard when capping polymorphic events to configured transitions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pass CodebaseContext into StrictFqnMatchingEngine so import-style OrderEvent.PAY
cannot match a.OrderEvent.PAY when OrderEvent is ambiguous across packages.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use package-aware simple-name compatibility in VariableTracer and preserve
case-insensitive field-to-type matching only when the simple name is unambiguous.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reject cross-package class matching and enum parameter compatibility when
types share an ambiguous simple name but differ by package-qualified FQN.
Co-authored-by: Cursor <cursoragent@cursor.com>
When an interface simple name is ambiguous, resolve FQN implementation
lookups within the requested package only, and stop capping polymorphic
candidates to machine transitions by constant name across enum types.
Co-authored-by: Cursor <cursoragent@cursor.com>
Do not backfill polymorphic events from configured transitions when a
trigger is ambiguous without enum-member constraints, and block symbolic
inference when the symbolic type simple name is ambiguous across packages.
Co-authored-by: Cursor <cursoragent@cursor.com>