transition enricher

This commit is contained in:
2026-06-18 23:02:39 +02:00
parent d93d36e8ad
commit 8d4ba0697e
20 changed files with 845 additions and 57 deletions

View File

@@ -0,0 +1,121 @@
package click.kamil.springstatemachineexporter.analysis.enricher;
import click.kamil.springstatemachineexporter.analysis.model.AnalysisResult;
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
import click.kamil.springstatemachineexporter.analysis.model.CodebaseMetadata;
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
import click.kamil.springstatemachineexporter.model.Event;
import click.kamil.springstatemachineexporter.model.State;
import click.kamil.springstatemachineexporter.model.Transition;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class TransitionLinkerEnricherTest {
private final TransitionLinkerEnricher enricher = new TransitionLinkerEnricher();
@Test
void shouldLinkTransitionByEventOnly() {
Transition t1 = new Transition();
t1.setSourceStates(List.of(State.of("NEW", "NEW")));
t1.setTargetStates(List.of(State.of("PAID", "PAID")));
t1.setEvent(Event.of("PAY", "PAY"));
Transition t2 = new Transition();
t2.setSourceStates(List.of(State.of("FAILED", "FAILED")));
t2.setTargetStates(List.of(State.of("PAID", "PAID")));
t2.setEvent(Event.of("PAY", "PAY"));
CallChain chain = CallChain.builder()
.triggerPoint(TriggerPoint.builder().event("PAY").build())
.build();
AnalysisResult result = AnalysisResult.builder()
.transitions(List.of(t1, t2))
.metadata(CodebaseMetadata.builder().callChains(List.of(chain)).build())
.build();
enricher.enrich(result, null, null);
CallChain updatedChain = result.getMetadata().getCallChains().get(0);
assertThat(updatedChain.getMatchedTransitions()).hasSize(2);
assertThat(updatedChain.getMatchedTransitions())
.extracting("sourceState")
.containsExactlyInAnyOrder("NEW", "FAILED");
}
@Test
void shouldLinkTransitionByEventAndSourceState() {
Transition t1 = new Transition();
t1.setSourceStates(List.of(State.of("NEW", "NEW")));
t1.setTargetStates(List.of(State.of("PAID", "PAID")));
t1.setEvent(Event.of("PAY", "PAY"));
Transition t2 = new Transition();
t2.setSourceStates(List.of(State.of("FAILED", "FAILED")));
t2.setTargetStates(List.of(State.of("PAID", "PAID")));
t2.setEvent(Event.of("PAY", "PAY"));
CallChain chain = CallChain.builder()
.triggerPoint(TriggerPoint.builder().event("PAY").sourceState("NEW").build())
.build();
AnalysisResult result = AnalysisResult.builder()
.transitions(List.of(t1, t2))
.metadata(CodebaseMetadata.builder().callChains(List.of(chain)).build())
.build();
enricher.enrich(result, null, null);
CallChain updatedChain = result.getMetadata().getCallChains().get(0);
assertThat(updatedChain.getMatchedTransitions()).hasSize(1);
assertThat(updatedChain.getMatchedTransitions().get(0).getSourceState()).isEqualTo("NEW");
assertThat(updatedChain.getMatchedTransitions().get(0).getTargetState()).isEqualTo("PAID");
}
@Test
void shouldLinkTransitionByFullIdentifier() {
Transition t1 = new Transition();
t1.setSourceStates(List.of(State.of("\"NEW\"", "NEW")));
t1.setTargetStates(List.of(State.of("\"PAID\"", "PAID")));
// This simulates how Spring Config usually has Event as OrderEvents.PAY but its resolved string is "PAY_ORDER"
t1.setEvent(Event.of("OrderEvents.PAY", "PAY_ORDER"));
CallChain chain = CallChain.builder()
.triggerPoint(TriggerPoint.builder().event("PAY_ORDER").sourceState("NEW").build())
.build();
AnalysisResult result = AnalysisResult.builder()
.transitions(List.of(t1))
.metadata(CodebaseMetadata.builder().callChains(List.of(chain)).build())
.build();
enricher.enrich(result, null, null);
CallChain updatedChain = result.getMetadata().getCallChains().get(0);
assertThat(updatedChain.getMatchedTransitions()).hasSize(1);
assertThat(updatedChain.getMatchedTransitions().get(0).getSourceState()).isEqualTo("NEW");
assertThat(updatedChain.getMatchedTransitions().get(0).getTargetState()).isEqualTo("PAID");
assertThat(updatedChain.getMatchedTransitions().get(0).getEvent()).isEqualTo("PAY_ORDER");
}
@Test
void shouldHandleUnknownEvents() {
CallChain chain = CallChain.builder()
.triggerPoint(TriggerPoint.builder().event(null).build()) // Dynamic or unresolved event
.build();
AnalysisResult result = AnalysisResult.builder()
.transitions(List.of(new Transition()))
.metadata(CodebaseMetadata.builder().callChains(List.of(chain)).build())
.build();
enricher.enrich(result, null, null);
CallChain updatedChain = result.getMetadata().getCallChains().get(0);
assertThat(updatedChain.getMatchedTransitions()).isNull();
}
}

View File

@@ -0,0 +1,47 @@
package click.kamil.springstatemachineexporter.analysis.service;
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
import click.kamil.springstatemachineexporter.analysis.resolver.ConstantResolver;
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class GenericEventDetectorTest {
@Test
void testMessageBuilderVariableAssignment(@TempDir Path tempDir) throws IOException {
Path dir = tempDir.resolve("com/example");
Files.createDirectories(dir);
Files.writeString(dir.resolve("MyService.java"),
"package com.example;\n" +
"import org.springframework.messaging.support.MessageBuilder;\n" +
"import org.springframework.messaging.Message;\n" +
"import org.springframework.statemachine.StateMachine;\n" +
"public class MyService {\n" +
" private StateMachine<String, String> stateMachine;\n" +
" private void a(MyInterface myEvent) {\n" +
" Message<MyInterface> msg = MessageBuilder.withPayload(myEvent).setHeader(\"k\", \"v\").build();\n" +
" stateMachine.sendEvent(Mono.just(msg));\n" +
" }\n" +
"}\n");
CodebaseContext context = new CodebaseContext();
context.scan(tempDir);
GenericEventDetector detector = new GenericEventDetector(context, new ConstantResolver(), List.of());
CompilationUnit cu = context.getCompilationUnits().iterator().next();
List<TriggerPoint> triggers = detector.detect(cu);
assertThat(triggers).hasSize(1);
assertThat(triggers.get(0).getEvent()).isEqualTo("myEvent");
assertThat(triggers.get(0).getMethodName()).isEqualTo("a");
}
}

View File

@@ -0,0 +1,55 @@
package click.kamil.springstatemachineexporter.service;
import click.kamil.springstatemachineexporter.exporter.StateMachineExporter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class ExportServiceEmptyStateTest {
@TempDir
Path tempDir;
@Test
void shouldSkipEmptyStateMachineConfigurations() throws Exception {
// Arrange
Path inputDir = tempDir.resolve("input");
Files.createDirectories(inputDir);
Path outputDir = tempDir.resolve("output");
Files.createDirectories(outputDir);
String code = """
package com.example;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineConfigurerAdapter;
@Configuration
@EnableStateMachine
public class EmptyStateMachineConfig extends StateMachineConfigurerAdapter<String, String> {
// No configurers overridden, meaning 0 states and 0 transitions parsed
}
""";
Files.writeString(inputDir.resolve("EmptyStateMachineConfig.java"), code);
ExportService exportService = new ExportService(Collections.emptyList()); // No exporters needed, checking if it generates anything (it generates JSON natively)
// Act
exportService.runExporter(inputDir, outputDir, List.of("plantuml"), true);
// Assert
// The output directory should have no files created in it
long fileCount = Files.walk(outputDir)
.filter(Files::isRegularFile)
.count();
assertThat(fileCount).isZero();
}
}

View File

@@ -7,6 +7,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/api/SecurityInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
}, {
"event" : "PLACE_ORDER",
@@ -15,6 +16,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/OrderServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}, {
"event" : "CANCEL_ORDER",
@@ -23,6 +25,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/OrderServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 21
}, {
"event" : "PAY_ORDER",
@@ -31,6 +34,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/ReactivePaymentService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
}, {
"event" : "SHIP_ORDER",
@@ -39,6 +43,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/messaging/ShippingJmsListener.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
}, {
"event" : "RETURN_ORDER",
@@ -47,6 +52,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/messaging/ReturnsRabbitListener.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
} ],
"entryPoints" : [ {
@@ -178,8 +184,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/OrderServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "NEW",
"targetState" : "CHECK_AVAILABILITY",
"event" : "PLACE_ORDER"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -205,8 +218,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/OrderServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 21
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PAID",
"targetState" : "CANCELLED",
"event" : "CANCEL_ORDER"
} ]
}, {
"entryPoint" : {
"type" : "CUSTOM",
@@ -227,8 +247,11 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/api/SecurityInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
}
},
"contextMachineId" : null,
"matchedTransitions" : [ ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -254,8 +277,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/service/ReactivePaymentService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PENDING_PAYMENT",
"targetState" : "PAID",
"event" : "PAY_ORDER"
} ]
}, {
"entryPoint" : {
"type" : "JMS",
@@ -281,8 +311,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/messaging/ShippingJmsListener.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PAID",
"targetState" : "SHIPPED",
"event" : "SHIP_ORDER"
} ]
}, {
"entryPoint" : {
"type" : "RABBIT",
@@ -308,8 +345,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/enterprise/messaging/ReturnsRabbitListener.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 17
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "DELIVERED",
"targetState" : "RETURNED",
"event" : "RETURN_ORDER"
} ]
} ],
"properties" : {
"default" : { }

View File

@@ -7,6 +7,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 34
}, {
"event" : "AUDIT_EVENT",
@@ -15,6 +16,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}, {
"event" : "EXTERNAL_TRIGGER",
@@ -23,6 +25,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 19
}, {
"event" : "SUBMIT_EVENT",
@@ -31,6 +34,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 20
}, {
"event" : "CANCEL_EVENT",
@@ -39,6 +43,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 25
}, {
"event" : "[LIFECYCLE:RESTORE]",
@@ -47,6 +52,7 @@
"sourceFile" : null,
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 29
}, {
"event" : "REACTIVE_EVENT",
@@ -55,6 +61,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
} ],
"entryPoints" : [ {
@@ -152,8 +159,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 19
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "EXTERNAL_TRIGGER"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -175,8 +189,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 20
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "SUBMIT_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -198,8 +219,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 25
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PROCESSING",
"targetState" : "CANCELLED",
"event" : "CANCEL_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -221,8 +249,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 34
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PROCESSING",
"targetState" : "COMPLETED",
"event" : "FINISH"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -248,8 +283,11 @@
"sourceFile" : null,
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 29
}
},
"contextMachineId" : "orderId",
"matchedTransitions" : [ ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -275,8 +313,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "REACTIVE_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "CUSTOM",
@@ -297,8 +342,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "START",
"event" : "AUDIT_EVENT"
} ]
} ],
"properties" : {
"default" : {

View File

@@ -7,6 +7,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 34
}, {
"event" : "AUDIT_EVENT",
@@ -15,6 +16,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}, {
"event" : "EXTERNAL_TRIGGER",
@@ -23,6 +25,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 19
}, {
"event" : "SUBMIT_EVENT",
@@ -31,6 +34,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 20
}, {
"event" : "CANCEL_EVENT",
@@ -39,6 +43,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 25
}, {
"event" : "[LIFECYCLE:RESTORE]",
@@ -47,6 +52,7 @@
"sourceFile" : null,
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 29
}, {
"event" : "REACTIVE_EVENT",
@@ -55,6 +61,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
} ],
"entryPoints" : [ {
@@ -152,8 +159,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 19
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "EXTERNAL_TRIGGER"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -175,8 +189,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 20
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "SUBMIT_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -198,8 +219,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 25
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PROCESSING",
"targetState" : "CANCELLED",
"event" : "CANCEL_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -221,8 +249,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 34
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "PROCESSING",
"targetState" : "COMPLETED",
"event" : "FINISH"
} ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -248,8 +283,11 @@
"sourceFile" : null,
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 29
}
},
"contextMachineId" : "orderId",
"matchedTransitions" : [ ]
}, {
"entryPoint" : {
"type" : "REST",
@@ -275,8 +313,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "PROCESSING",
"event" : "REACTIVE_EVENT"
} ]
}, {
"entryPoint" : {
"type" : "CUSTOM",
@@ -297,8 +342,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 16
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "START",
"event" : "AUDIT_EVENT"
} ]
} ],
"properties" : {
"default" : {

View File

@@ -7,6 +7,7 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/inheritance/service/ProcessingServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 15
} ],
"entryPoints" : [ {
@@ -53,8 +54,15 @@
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/inheritance/service/ProcessingServiceImpl.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 15
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "START",
"targetState" : "WORKING",
"event" : "INHERITED_SUBMIT"
} ]
} ],
"properties" : {
"default" : { }

View File

@@ -7,6 +7,7 @@
"sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 40
}, {
"event" : "ORDER_EVENT",
@@ -15,6 +16,7 @@
"sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 52
} ],
"entryPoints" : [ {
@@ -100,8 +102,15 @@
"sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 40
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "INIT",
"targetState" : "BUSY",
"event" : "SUBMIT"
} ]
} ],
"properties" : {
"default" : { }

View File

@@ -7,6 +7,7 @@
"sourceFile" : "core-module/src/main/java/click/kamil/multi/core/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
} ],
"entryPoints" : [ {
@@ -65,8 +66,15 @@
"sourceFile" : "core-module/src/main/java/click/kamil/multi/core/OrderController.java",
"sourceModule" : null,
"stateMachineId" : null,
"sourceState" : null,
"lineNumber" : 18
}
},
"contextMachineId" : null,
"matchedTransitions" : [ {
"sourceState" : "NEW",
"targetState" : "PROCESSING",
"event" : "SUBMIT"
} ]
} ],
"properties" : {
"default" : { }