Thread context through transition and state canonicalization
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>
This commit is contained in:
@@ -110,4 +110,35 @@ class MachineEnumCanonicalizerCrossPackageTest {
|
||||
assertThat(MachineEnumCanonicalizer.isMachineEnumReference(
|
||||
"OrderEvent.PAY", "a.OrderEvent", context)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotCanonicalizeAmbiguousImportStyleTransitionEvents(@TempDir Path tempDir) throws Exception {
|
||||
Files.createDirectories(tempDir.resolve("a"));
|
||||
Files.createDirectories(tempDir.resolve("b"));
|
||||
Files.writeString(tempDir.resolve("a/OrderEvent.java"),
|
||||
"package a; public enum OrderEvent { PAY }");
|
||||
Files.writeString(tempDir.resolve("b/OrderEvent.java"),
|
||||
"package b; public enum OrderEvent { CANCEL }");
|
||||
Files.writeString(tempDir.resolve("a/OrderState.java"),
|
||||
"package a; public enum OrderState { NEW, PAID }");
|
||||
|
||||
CodebaseContext context = new CodebaseContext();
|
||||
context.scan(tempDir);
|
||||
|
||||
click.kamil.springstatemachineexporter.model.Transition transition =
|
||||
new click.kamil.springstatemachineexporter.model.Transition();
|
||||
transition.setEvent(click.kamil.springstatemachineexporter.model.Event.of(
|
||||
"OrderEvent.PAY", "OrderEvent.PAY"));
|
||||
transition.setSourceStates(List.of(click.kamil.springstatemachineexporter.model.State.of(
|
||||
"OrderState.NEW", "OrderState.NEW")));
|
||||
transition.setTargetStates(List.of(click.kamil.springstatemachineexporter.model.State.of(
|
||||
"OrderState.PAID", "OrderState.PAID")));
|
||||
|
||||
StateMachineTypeResolver.MachineTypes types = new StateMachineTypeResolver.MachineTypes(
|
||||
"a.OrderState", "a.OrderEvent");
|
||||
MachineEnumCanonicalizer.canonicalizeTransitions(List.of(transition), types, context);
|
||||
|
||||
assertThat(transition.getEvent().fullIdentifier()).isEqualTo("OrderEvent.PAY");
|
||||
assertThat(transition.getSourceStates().get(0).fullIdentifier()).isEqualTo("a.OrderState.NEW");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user