diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java index a053ee2..b008d55 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java @@ -2,7 +2,9 @@ package click.kamil.springstatemachineexporter.analysis.enricher.routing; import click.kamil.springstatemachineexporter.analysis.model.CallChain; import click.kamil.springstatemachineexporter.analysis.resolver.StateMachineTypeResolver; +import click.kamil.springstatemachineexporter.ast.common.AstUtils; import click.kamil.springstatemachineexporter.ast.common.CodebaseContext; +import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.TypeDeclaration; import java.util.HashSet; @@ -12,8 +14,21 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { @Override public boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context) { + String explicitTarget = chain.getContextMachineId(); + if (explicitTarget == null && chain.getTriggerPoint() != null) { + explicitTarget = chain.getTriggerPoint().getStateMachineId(); + } + if (explicitTarget != null && !explicitTarget.isEmpty() && context != null && currentMachineName != null) { + Boolean namedTarget = resolveNamedBeanTarget(explicitTarget, currentMachineName, context); + if (namedTarget != null) { + return namedTarget; + } + } + + boolean hasExplicitBeanTarget = explicitTarget != null && !explicitTarget.isEmpty(); + // Precise FQN Type argument match from JDT bindings at sendEvent site - if (chain.getTriggerPoint() != null && context != null && currentMachineName != null) { + if (!hasExplicitBeanTarget && chain.getTriggerPoint() != null && context != null && currentMachineName != null) { String triggerEventFqn = chain.getTriggerPoint().getEventTypeFqn(); String triggerStateFqn = chain.getTriggerPoint().getStateTypeFqn(); if (triggerEventFqn != null || triggerStateFqn != null) { @@ -54,7 +69,7 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { } } - String targetVar = chain.getContextMachineId(); + String targetVar = hasExplicitBeanTarget ? explicitTarget : chain.getContextMachineId(); if (targetVar == null && chain.getTriggerPoint() != null) { targetVar = chain.getTriggerPoint().getStateMachineId(); } @@ -129,6 +144,67 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { return context == null || isSingleStateMachine(context); } + private Boolean resolveNamedBeanTarget(String beanName, String currentMachineName, CodebaseContext context) { + String normalized = stripAnnotationQuotes(beanName); + if (normalized == null || normalized.isEmpty()) { + return null; + } + String matchingConfig = null; + for (TypeDeclaration configType : context.findEntryPointClasses(java.util.List.of("EnableStateMachine"))) { + String configFqn = context.getFqn(configType); + String configuredName = extractEnableStateMachineName(configType); + if (configuredName == null || configuredName.isEmpty()) { + configuredName = defaultBeanName(configType.getName().getIdentifier()); + } + if (normalized.equals(configuredName)) { + matchingConfig = configFqn; + break; + } + } + if (matchingConfig == null) { + return null; + } + return currentMachineName.equals(matchingConfig); + } + + private static String extractEnableStateMachineName(TypeDeclaration configType) { + for (Object modifierObj : configType.modifiers()) { + if (!(modifierObj instanceof Annotation annotation)) { + continue; + } + if (!annotation.getTypeName().toString().endsWith("EnableStateMachine")) { + continue; + } + String name = AstUtils.extractAnnotationMember(annotation, "name"); + if (name != null && !name.isBlank()) { + return stripAnnotationQuotes(name); + } + String value = AstUtils.extractAnnotationMember(annotation, "value"); + if (value != null && !value.isBlank()) { + return stripAnnotationQuotes(value); + } + } + return null; + } + + private static String defaultBeanName(String simpleClassName) { + if (simpleClassName == null || simpleClassName.isEmpty()) { + return simpleClassName; + } + return Character.toLowerCase(simpleClassName.charAt(0)) + simpleClassName.substring(1); + } + + private static String stripAnnotationQuotes(String raw) { + if (raw == null || raw.isBlank()) { + return null; + } + String trimmed = raw.trim(); + if (trimmed.length() >= 2 && trimmed.startsWith("\"") && trimmed.endsWith("\"")) { + return trimmed.substring(1, trimmed.length() - 1); + } + return trimmed; + } + private int countStateMachines(CodebaseContext context) { if (context == null) { return 0; diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java index 353e0a7..eaf7ec3 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java @@ -97,6 +97,7 @@ public class GenericEventDetector { if (sourceState == null) { sourceState = extractSourceStateFromArguments(node); } + String stateMachineId = extractStateMachineId(node); String[] smTypes = resolveStateMachineTypeArgumentsForExpression(emr.getExpression(), node); boolean external = false; @@ -110,6 +111,7 @@ public class GenericEventDetector { triggers.add(TriggerPoint.builder() .event(eventValue) .sourceState(sourceState) + .stateMachineId(stateMachineId) .className(context.getFqn(type)) .methodName(method != null ? method.getName().getIdentifier() : "initializer") .sourceFile(context.getRelativePath(context.getFqn(type))) @@ -311,6 +313,7 @@ public class GenericEventDetector { if (sourceState == null && node instanceof MethodInvocation mi) { sourceState = extractSourceStateFromArguments(mi); } + String stateMachineId = extractStateMachineId(node); String[] smTypes = resolveStateMachineTypeArguments(node); boolean external = false; @@ -330,6 +333,7 @@ public class GenericEventDetector { results.add(TriggerPoint.builder() .event(part.trim()) .sourceState(sourceState) + .stateMachineId(stateMachineId) .className(context.getFqn(type)) .methodName(method != null ? method.getName().getIdentifier() : "initializer") .sourceFile(context.getRelativePath(context.getFqn(type))) @@ -345,6 +349,7 @@ public class GenericEventDetector { results.add(TriggerPoint.builder() .event(eventValue) .sourceState(sourceState) + .stateMachineId(stateMachineId) .className(context.getFqn(type)) .methodName(method != null ? method.getName().getIdentifier() : "initializer") .sourceFile(context.getRelativePath(context.getFqn(type))) @@ -383,6 +388,21 @@ public class GenericEventDetector { String state = extractStateFromSiblings(current, switchStmt.statements()); if (state != null) return state; } + } else if (parent instanceof SwitchExpression switchExpr) { + if (!isRoutingParameter(switchExpr.getExpression())) { + String state = extractStateFromSiblings(current, switchExpr.statements()); + if (state != null) return state; + } + } else if (parent instanceof SwitchCase switchCase && !switchCase.isDefault()) { + Expression selector = resolveSwitchSelector(switchCase); + if (selector != null && !isRoutingParameter(selector) && !switchCase.expressions().isEmpty()) { + Expression caseExpr = (Expression) switchCase.expressions().get(0); + String resolved = resolveProvableStateLiteral(caseExpr); + if (resolved != null) { + return resolved; + } + return getSimpleNameString(caseExpr); + } } current = parent; @@ -390,6 +410,151 @@ public class GenericEventDetector { return null; } + private Expression resolveSwitchSelector(SwitchCase switchCase) { + ASTNode switchParent = switchCase.getParent(); + if (switchParent instanceof SwitchStatement switchStatement) { + return switchStatement.getExpression(); + } + if (switchParent instanceof SwitchExpression switchExpression) { + return switchExpression.getExpression(); + } + return null; + } + + private String extractStateMachineId(MethodInvocation node) { + if (!TRIGGER_METHOD_NAMES.contains(node.getName().getIdentifier())) { + return null; + } + Expression receiver = node.getExpression(); + while (receiver instanceof MethodInvocation methodInvocation) { + receiver = methodInvocation.getExpression(); + } + if (receiver == null) { + return null; + } + AbstractTypeDeclaration enclosing = findEnclosingAbstractType(node); + if (enclosing == null) { + return null; + } + return resolveQualifierForReceiver(receiver, enclosing); + } + + private String resolveQualifierForReceiver(Expression receiver, AbstractTypeDeclaration enclosing) { + String fieldName = null; + if (receiver instanceof SimpleName simpleName) { + fieldName = simpleName.getIdentifier(); + IBinding binding = simpleName.resolveBinding(); + if (binding instanceof IVariableBinding variableBinding) { + String fromBinding = extractQualifierFromBinding(variableBinding); + if (fromBinding != null) { + return fromBinding; + } + } + } else if (receiver instanceof FieldAccess fieldAccess) { + fieldName = fieldAccess.getName().getIdentifier(); + } + if (fieldName == null) { + return null; + } + return findQualifierOnField(enclosing, fieldName); + } + + private String findQualifierOnField(AbstractTypeDeclaration enclosing, String fieldName) { + for (FieldDeclaration fieldDeclaration : getFieldDeclarations(enclosing)) { + for (Object fragmentObj : fieldDeclaration.fragments()) { + if (fragmentObj instanceof VariableDeclarationFragment fragment + && fragment.getName().getIdentifier().equals(fieldName)) { + String qualifier = extractQualifierAnnotation(fieldDeclaration.modifiers()); + if (qualifier != null) { + return qualifier; + } + } + } + } + return null; + } + + private String extractQualifierFromBinding(IVariableBinding binding) { + if (binding == null) { + return null; + } + String qualifier = readQualifierFromAnnotations(binding.getAnnotations()); + if (qualifier != null) { + return qualifier; + } + if (binding.isField() && binding.getDeclaringClass() != null) { + for (IMethodBinding method : binding.getDeclaringClass().getDeclaredMethods()) { + if (!method.isConstructor()) { + continue; + } + for (int i = 0; i < method.getParameterTypes().length; i++) { + if (method.getParameterTypes()[i].isEqualTo(binding.getType().getErasure()) + && binding.getName().equals(method.getParameterNames()[i])) { + String paramQualifier = readQualifierFromAnnotations(method.getParameterAnnotations(i)); + if (paramQualifier != null) { + return paramQualifier; + } + } + } + } + } + return null; + } + + private String readQualifierFromAnnotations(IAnnotationBinding[] annotations) { + if (annotations == null) { + return null; + } + for (IAnnotationBinding annotation : annotations) { + if (annotation.getAnnotationType() == null + || !"org.springframework.beans.factory.annotation.Qualifier" + .equals(annotation.getAnnotationType().getQualifiedName())) { + continue; + } + for (IMemberValuePairBinding pair : annotation.getDeclaredMemberValuePairs()) { + Object value = pair.getValue(); + if (value instanceof String stringValue) { + return stringValue; + } + } + } + return null; + } + + private String extractQualifierAnnotation(List modifiers) { + if (modifiers == null) { + return null; + } + for (Object modifierObj : modifiers) { + if (!(modifierObj instanceof Annotation annotation)) { + continue; + } + String typeName = annotation.getTypeName().toString(); + if (!typeName.endsWith("Qualifier")) { + continue; + } + String value = click.kamil.springstatemachineexporter.ast.common.AstUtils.extractAnnotationMember( + annotation, "value"); + if (value == null || value.isBlank()) { + value = click.kamil.springstatemachineexporter.ast.common.AstUtils.extractAnnotationMember( + annotation, "name"); + } + return stripAnnotationQuotes(value); + } + return null; + } + + private static String stripAnnotationQuotes(String raw) { + if (raw == null || raw.isBlank()) { + return null; + } + String trimmed = raw.trim(); + if (trimmed.length() >= 2 && trimmed.startsWith("\"") && trimmed.endsWith("\"")) { + return trimmed.substring(1, trimmed.length() - 1); + } + return trimmed; + } + /** * Infers source state from a literal second argument to sendEvent(event, sourceState) when provable from AST. */ diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineTest.java index a48b477..596348d 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineTest.java @@ -168,6 +168,35 @@ public class HeuristicBeanResolutionEngineTest { "Ambiguous shared gateway should not attach to every machine"); } + @Test + void shouldResolveTriggerStateMachineIdAgainstEnableStateMachineName(@TempDir Path tempDir) throws Exception { + Files.writeString(tempDir.resolve("PaymentConfig.java"), """ + package com.example; + @org.springframework.statemachine.config.EnableStateMachine(name = "paymentStateMachine") + public class PaymentStateMachineConfig + extends org.springframework.statemachine.config.StateMachineConfigurerAdapter {} + """); + Files.writeString(tempDir.resolve("OrderConfig.java"), """ + package com.example; + @org.springframework.statemachine.config.EnableStateMachine(name = "orderStateMachine") + public class OrderStateMachineConfig + extends org.springframework.statemachine.config.StateMachineConfigurerAdapter {} + """); + + CodebaseContext context = new CodebaseContext(); + context.scan(tempDir); + + CallChain chain = CallChain.builder() + .triggerPoint(TriggerPoint.builder() + .stateMachineId("paymentStateMachine") + .build()) + .methodChain(List.of("com.example.PaymentService.capture()")) + .build(); + + assertTrue(engine.isRoutedToCorrectMachine(chain, "com.example.PaymentStateMachineConfig", context)); + assertFalse(engine.isRoutedToCorrectMachine(chain, "com.example.OrderStateMachineConfig", context)); + } + @Test void shouldAcceptTriggerWhenSpringErasureDiffersFromStringMachineTypes(@TempDir Path tempDir) throws Exception { Files.writeString(tempDir.resolve("InheritanceStateMachineConfig.java"), """ diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorControlFlowTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorControlFlowTest.java index aafaed6..63072be 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorControlFlowTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorControlFlowTest.java @@ -130,6 +130,43 @@ class GenericEventDetectorControlFlowTest { assertThat(shipTrigger.getSourceState()).isEqualTo("PAID"); } + @Test + void shouldDetectStateFromSwitchExpressionArrowSyntax(@TempDir Path tempDir) throws IOException { + String source = """ + package com.example; + public class OrderService { + private StateMachine sm; + public void processOrder(OrderState state) { + switch (state) { + case PENDING -> sm.sendEvent(OrderEvent.PAY); + case PAID -> sm.sendEvent(OrderEvent.SHIP); + } + } + } + + class StateMachine { + public void sendEvent(OrderEvent e) {} + } + + enum OrderState { PENDING, PAID } + enum OrderEvent { PAY, SHIP } + """; + Files.writeString(tempDir.resolve("OrderService.java"), source); + + CodebaseContext context = new CodebaseContext(); + context.scan(tempDir); + + GenericEventDetector detector = new GenericEventDetector(context, new ConstantResolver(), Collections.emptyList()); + List triggers = detector.detect( + (org.eclipse.jdt.core.dom.CompilationUnit) context.getTypeDeclaration("com.example.OrderService").getRoot()); + + assertThat(triggers).hasSize(2); + assertThat(triggers.stream().filter(t -> t.getEvent().equals("OrderEvent.PAY")).findFirst().orElseThrow() + .getSourceState()).isEqualTo("PENDING"); + assertThat(triggers.stream().filter(t -> t.getEvent().equals("OrderEvent.SHIP")).findFirst().orElseThrow() + .getSourceState()).isEqualTo("PAID"); + } + @Test void shouldNotTreatMachineTypeDiscriminatorAsSourceState(@TempDir Path tempDir) throws IOException { String source = """ diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java index b86ce3a..302f41a 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java @@ -77,6 +77,37 @@ class GenericEventDetectorFireTest { assertThat(triggers.get(0).getSourceState()).isEqualTo("PAID"); } + @Test + void shouldInferStateMachineIdFromQualifierOnSendEventReceiver(@TempDir Path tempDir) throws Exception { + String source = """ + package com.example; + enum OrderEvent { PAY } + class OrderService { + @org.springframework.beans.factory.annotation.Qualifier("paymentStateMachine") + private final StateMachine stateMachine; + OrderService(StateMachine stateMachine) { this.stateMachine = stateMachine; } + public void pay() { + stateMachine.sendEvent(OrderEvent.PAY); + } + } + class StateMachine { + public void sendEvent(OrderEvent event) {} + } + """; + Files.writeString(tempDir.resolve("OrderService.java"), source); + + CodebaseContext context = new CodebaseContext(); + context.setResolveBindings(true); + context.scan(tempDir); + + GenericEventDetector detector = new GenericEventDetector(context, context.getConstantResolver(), List.of()); + org.eclipse.jdt.core.dom.TypeDeclaration td = context.getTypeDeclaration("com.example.OrderService"); + List triggers = detector.detect((org.eclipse.jdt.core.dom.CompilationUnit) td.getRoot()); + + assertThat(triggers).hasSize(1); + assertThat(triggers.get(0).getStateMachineId()).isEqualTo("paymentStateMachine"); + } + @Test void shouldNotInferSourceStateFromVariableOnlyIfCondition(@TempDir Path tempDir) throws Exception { String source = """ diff --git a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json index ba6a2fe..dcc5e8c 100644 --- a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json @@ -149,45 +149,6 @@ "external" : false, "constraint" : null, "ambiguous" : false - }, { - "event" : "java.lang.String.FALLBACK_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.PROFILED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.ProfiledQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ProfiledQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false }, { "event" : "java.lang.String.SUBMIT_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.OrderService", @@ -227,58 +188,6 @@ "external" : false, "constraint" : null, "ambiguous" : false - }, { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.AUTHORIZE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "processPayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 22, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.CAPTURE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 35, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", @@ -339,21 +248,6 @@ "verb" : "POST" }, "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/orders/resume", - "className" : "click.kamil.examples.statemachine.extended.web.OrderController", - "methodName" : "resumeOrder", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", - "metadata" : { - "path" : "/api/orders/resume", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "orderId", - "type" : "String", - "annotations" : [ ] - } ] }, { "type" : "REST", "name" : "POST /api/orders/reactive", @@ -379,83 +273,6 @@ "interceptorType" : "Spring MVC Interceptor" }, "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-setter", - "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", - "methodName" : "testSetter", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", - "metadata" : { - "path" : "/test-setter", - "verb" : "GET" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/primary", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testPrimary", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/primary", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/named", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testNamed", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/named", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/qualifier", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testQualifier", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/qualifier", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/fallback", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testFallback", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/fallback", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-concrete", - "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", - "methodName" : "testConcrete", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", - "metadata" : { - "path" : "/test-concrete", - "verb" : "GET" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-field", - "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", - "methodName" : "testField", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", - "metadata" : { - "path" : "/test-field", - "verb" : "GET" - }, - "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -592,41 +409,6 @@ "event" : "String.FINISH" } ], "linkResolution" : "RESOLVED" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/orders/resume", - "className" : "click.kamil.examples.statemachine.extended.web.OrderController", - "methodName" : "resumeOrder", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", - "metadata" : { - "path" : "/api/orders/resume", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "orderId", - "type" : "String", - "annotations" : [ ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.resumeOrder", "click.kamil.examples.statemachine.extended.service.OrderService.resumeOrder" ], - "triggerPoint" : { - "event" : "[LIFECYCLE:RESTORE]", - "className" : "click.kamil.examples.statemachine.extended.service.OrderService", - "methodName" : "resumeOrder", - "sourceFile" : null, - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 29, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "orderId", - "matchedTransitions" : null, - "linkResolution" : null }, { "entryPoint" : { "type" : "REST", @@ -700,328 +482,6 @@ "event" : "String.AUDIT_EVENT" } ], "linkResolution" : "RESOLVED" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-setter", - "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", - "methodName" : "testSetter", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", - "metadata" : { - "path" : "/test-setter", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/primary", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testPrimary", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/primary", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/named", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testNamed", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/named", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/qualifier", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testQualifier", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/qualifier", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/fallback", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testFallback", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/fallback", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-concrete", - "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", - "methodName" : "testConcrete", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", - "metadata" : { - "path" : "/test-concrete", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-field", - "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", - "methodName" : "testField", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", - "metadata" : { - "path" : "/test-field", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /api/base/{id}", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "processBaseEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/base/{id}", - "verb" : "GET" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.processBaseEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.processPayment" ], - "triggerPoint" : { - "event" : "java.lang.String.AUTHORIZE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "processPayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 22, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/payment/{id}/capture", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], - "triggerPoint" : { - "event" : "java.lang.String.CAPTURE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 35, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "paymentId", - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/payment/{id}/capture", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], - "triggerPoint" : { - "event" : "[LIFECYCLE:RESTORE]", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : null, - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 28, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "paymentId", - "matchedTransitions" : null, - "linkResolution" : null } ], "properties" : { "default" : { diff --git a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json index ba6a2fe..dcc5e8c 100644 --- a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json @@ -149,45 +149,6 @@ "external" : false, "constraint" : null, "ambiguous" : false - }, { - "event" : "java.lang.String.FALLBACK_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.PROFILED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.ProfiledQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ProfiledQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false }, { "event" : "java.lang.String.SUBMIT_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.OrderService", @@ -227,58 +188,6 @@ "external" : false, "constraint" : null, "ambiguous" : false - }, { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.AUTHORIZE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "processPayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 22, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, { - "event" : "java.lang.String.CAPTURE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 35, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", @@ -339,21 +248,6 @@ "verb" : "POST" }, "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/orders/resume", - "className" : "click.kamil.examples.statemachine.extended.web.OrderController", - "methodName" : "resumeOrder", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", - "metadata" : { - "path" : "/api/orders/resume", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "orderId", - "type" : "String", - "annotations" : [ ] - } ] }, { "type" : "REST", "name" : "POST /api/orders/reactive", @@ -379,83 +273,6 @@ "interceptorType" : "Spring MVC Interceptor" }, "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-setter", - "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", - "methodName" : "testSetter", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", - "metadata" : { - "path" : "/test-setter", - "verb" : "GET" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/primary", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testPrimary", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/primary", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/named", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testNamed", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/named", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/qualifier", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testQualifier", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/qualifier", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "POST /api/quirk/fallback", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testFallback", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/fallback", - "verb" : "POST" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-concrete", - "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", - "methodName" : "testConcrete", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", - "metadata" : { - "path" : "/test-concrete", - "verb" : "GET" - }, - "parameters" : [ ] - }, { - "type" : "REST", - "name" : "GET /test-field", - "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", - "methodName" : "testField", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", - "metadata" : { - "path" : "/test-field", - "verb" : "GET" - }, - "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -592,41 +409,6 @@ "event" : "String.FINISH" } ], "linkResolution" : "RESOLVED" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/orders/resume", - "className" : "click.kamil.examples.statemachine.extended.web.OrderController", - "methodName" : "resumeOrder", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", - "metadata" : { - "path" : "/api/orders/resume", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "orderId", - "type" : "String", - "annotations" : [ ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.resumeOrder", "click.kamil.examples.statemachine.extended.service.OrderService.resumeOrder" ], - "triggerPoint" : { - "event" : "[LIFECYCLE:RESTORE]", - "className" : "click.kamil.examples.statemachine.extended.service.OrderService", - "methodName" : "resumeOrder", - "sourceFile" : null, - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 29, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "orderId", - "matchedTransitions" : null, - "linkResolution" : null }, { "entryPoint" : { "type" : "REST", @@ -700,328 +482,6 @@ "event" : "String.AUDIT_EVENT" } ], "linkResolution" : "RESOLVED" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-setter", - "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", - "methodName" : "testSetter", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", - "metadata" : { - "path" : "/test-setter", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/primary", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testPrimary", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/primary", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/named", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testNamed", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/named", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/qualifier", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testQualifier", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/qualifier", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/quirk/fallback", - "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", - "methodName" : "testFallback", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", - "metadata" : { - "path" : "/api/quirk/fallback", - "verb" : "POST" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.PRIMARY_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 19, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-concrete", - "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", - "methodName" : "testConcrete", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", - "metadata" : { - "path" : "/test-concrete", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.QUALIFIER_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /test-field", - "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", - "methodName" : "testField", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", - "metadata" : { - "path" : "/test-field", - "verb" : "GET" - }, - "parameters" : [ ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "java.lang.String.NAMED_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", - "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 17, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "GET /api/base/{id}", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "processBaseEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/base/{id}", - "verb" : "GET" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.processBaseEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.processPayment" ], - "triggerPoint" : { - "event" : "java.lang.String.AUTHORIZE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "processPayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 22, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : null, - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/payment/{id}/capture", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], - "triggerPoint" : { - "event" : "java.lang.String.CAPTURE", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 35, - "polymorphicEvents" : [ ], - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "paymentId", - "matchedTransitions" : null, - "linkResolution" : "NO_MATCH" - }, { - "entryPoint" : { - "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", - "metadata" : { - "path" : "/api/payment/{id}/capture", - "verb" : "POST" - }, - "parameters" : [ { - "name" : "id", - "type" : "String", - "annotations" : [ "PathVariable" ] - } ] - }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], - "triggerPoint" : { - "event" : "[LIFECYCLE:RESTORE]", - "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", - "methodName" : "capturePayment", - "sourceFile" : null, - "sourceModule" : null, - "stateMachineId" : null, - "sourceState" : null, - "lineNumber" : 28, - "polymorphicEvents" : null, - "external" : false, - "constraint" : null, - "ambiguous" : false - }, - "contextMachineId" : "paymentId", - "matchedTransitions" : null, - "linkResolution" : null } ], "properties" : { "default" : {