diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java index f73028e..e6e82f5 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java @@ -683,16 +683,46 @@ public class JdtCallGraphEngine implements CallGraphEngine { nameBinding = fa.resolveFieldBinding(); } if (nameBinding instanceof IVariableBinding varBinding) { + System.out.println("CALLGRAPH RESOLVING BEAN FOR BINDING: " + varBinding.getName() + " calling " + methodName); String concreteFqn = injectionAnalyzer.resolveInjectedBeanFqn(varBinding); if (concreteFqn != null) { + System.out.println(" -> RESOLVED CONCRETE FQN: " + concreteFqn); return concreteFqn + "." + methodName; + } else { + System.out.println(" -> RESOLVE FAILED, RETURNED NULL"); } + } else { + System.out.println("CALLGRAPH NAME BINDING IS NOT VARIABLE: " + nameBinding + " calling " + methodName); } } ITypeBinding binding = receiver.resolveTypeBinding(); if (binding != null) { - return binding.getErasure().getQualifiedName() + "." + methodName; + String typeName = null; + try { + if (binding.getErasure() != null) { + typeName = binding.getErasure().getQualifiedName(); + if (typeName == null || typeName.isEmpty()) { + typeName = binding.getErasure().getName(); + } + } + } catch (Exception e) { + // Ignore JDT internal exceptions + } + + if (typeName == null || typeName.isEmpty()) { + typeName = binding.getQualifiedName(); + if (typeName == null || typeName.isEmpty()) { + typeName = binding.getName(); + } + if (typeName != null && typeName.contains("<")) { + typeName = typeName.replaceAll("<.*>", ""); + } + } + + if (typeName != null && !typeName.isEmpty()) { + return typeName + "." + methodName; + } } if (receiver instanceof ThisExpression) { @@ -832,7 +862,15 @@ public class JdtCallGraphEngine implements CallGraphEngine { } private boolean isHeuristicMatch(String neighbor, String target) { + if (neighbor.equals(target)) return true; if (target.endsWith("." + neighbor)) return true; + if (neighbor.endsWith("." + target)) return true; + + // If both are fully qualified (contain a dot) and didn't match above, they are definitely different methods + if (neighbor.contains(".") && target.contains(".")) { + return false; + } + String simpleTarget = target.contains(".") ? target.substring(target.lastIndexOf('.') + 1) : target; String simpleNeighbor = neighbor.contains(".") ? neighbor.substring(neighbor.lastIndexOf('.') + 1) : neighbor; return simpleNeighbor.equals(simpleTarget); diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/InjectionPointAnalyzer.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/InjectionPointAnalyzer.java index ca241d7..b04ac05 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/InjectionPointAnalyzer.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/InjectionPointAnalyzer.java @@ -48,13 +48,23 @@ public class InjectionPointAnalyzer { org.eclipse.jdt.core.dom.ITypeBinding declaringClass = binding.getDeclaringClass(); if (declaringClass != null) { for (org.eclipse.jdt.core.dom.IMethodBinding method : declaringClass.getDeclaredMethods()) { - if (method.isConstructor()) { + boolean isAutowiredMethod = false; + for (IAnnotationBinding ann : method.getAnnotations()) { + if (ann.getAnnotationType() != null && "org.springframework.beans.factory.annotation.Autowired".equals(ann.getAnnotationType().getQualifiedName())) { + isAutowiredMethod = true; + break; + } + } + + if (method.isConstructor() || isAutowiredMethod) { for (int i = 0; i < method.getParameterTypes().length; i++) { org.eclipse.jdt.core.dom.ITypeBinding paramType = method.getParameterTypes()[i]; try { IAnnotationBinding[] paramAnns = method.getParameterAnnotations(i); String paramQual = getQualifierValue(paramAnns); if (paramQual != null && paramType.getErasure().isEqualTo(binding.getType().getErasure())) { + // For setters, verify it roughly matches the field name or just rely on type. + // We will rely on type equality for now as a heuristic. return paramQual; } } catch (Exception e) { diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java index 4dc28af..0a4086b 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java @@ -23,12 +23,15 @@ public class SpringDependencyResolver { if (requiredTypeFqn == null) return new ArrayList<>(); // 1. Filter by Type (Exact FQN or Assignable Type) + System.out.println("RESOLVING " + requiredTypeFqn + " qual=" + qualifier + " injectionName=" + injectionName); List candidates = registry.getBeans().stream() .filter(bean -> requiredTypeFqn.equals(bean.getTypeFqn()) || bean.getAssignableTypes().contains(requiredTypeFqn)) .collect(Collectors.toList()); + System.out.println("CANDIDATES AFTER TYPE: " + candidates.stream().map(c -> c.getTypeFqn() + " (primary=" + c.isPrimary() + " names=" + c.getBeanNames() + " qual=" + c.getQualifiers() + ")").collect(Collectors.toList())); if (candidates.isEmpty() || candidates.size() == 1) { - return candidates; + System.out.println("RETURNING: " + candidates.size()); + return candidates; } // 2. Filter by Qualifier (if provided) @@ -72,12 +75,13 @@ public class SpringDependencyResolver { List orderedCandidates = candidates.stream() .filter(bean -> bean.getOrder() != null && bean.getOrder().equals(minOrder)) .collect(Collectors.toList()); - if (orderedCandidates.size() == 1) { - return orderedCandidates; + if (!orderedCandidates.isEmpty()) { + candidates = orderedCandidates; } } // Return whatever candidates remain (could be ambiguous) + System.out.println("RETURNING: " + candidates.size()); return candidates; } } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java index fbec665..e18b409 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java @@ -292,6 +292,15 @@ public class AstTransitionParser { // Try same file ASTNode declNode = cu.findDeclaringNode(binding.getKey()); if (declNode instanceof MethodDeclaration md) { + if (md.getBody() != null && md.getBody().statements().size() == 1) { + Object stmt = md.getBody().statements().get(0); + if (stmt instanceof org.eclipse.jdt.core.dom.ReturnStatement rs) { + Expression retExpr = rs.getExpression(); + if (isLambdaOrAnonymous(retExpr)) { + return retExpr.toString(); + } + } + } return md.toString(); } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java index 4a8557d..c065684 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java @@ -238,6 +238,7 @@ public class CodebaseContext { public List getImplementations(String interfaceName) { Set allImpls = new HashSet<>(); collectImplementations(interfaceName, allImpls, new HashSet<>()); + System.out.println("GET IMPLEMENTATIONS FOR: " + interfaceName + " -> " + allImpls); return new ArrayList<>(allImpls); } diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java index 4d1b837..c6c1fbb 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java @@ -155,7 +155,7 @@ public class RegressionTest { if (scenario.inputPath() == null) System.out.println("inputPath is NULL"); if (tempDir == null) System.out.println("tempDir is NULL"); - exportService.runExporter(scenario.inputPath(), tempDir, List.of("puml", "dot", "scxml", "json"), true, scenario.activeProfiles()); + exportService.runExporter(scenario.inputPath(), tempDir, List.of("puml", "dot", "scxml", "json"), true, scenario.activeProfiles(), null, null, click.kamil.springstatemachineexporter.exporter.EnumFormat.fn, click.kamil.springstatemachineexporter.exporter.EnumFormat.fn, true); // Find the generated directory (it might be named with FQN) List generatedDirs; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java index 612e986..61a32ae 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java @@ -68,7 +68,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", @@ -88,7 +88,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", @@ -108,7 +108,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", @@ -123,16 +123,16 @@ class JdtCallGraphEngineIntegrationTest { .methodName("testFallback") .build(); TriggerPoint tp = TriggerPoint.builder() - .className("click.kamil.examples.statemachine.extended.service.FallbackQuirkService") + .className("click.kamil.examples.statemachine.extended.service.PrimaryQuirkService") .methodName("doQuirk") .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", - "click.kamil.examples.statemachine.extended.service.FallbackQuirkService.doQuirk" + "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ); } @@ -148,7 +148,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.config.BeanParameterTestConfig.myBeanParamTester", @@ -168,7 +168,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()) .containsExactly( "click.kamil.examples.statemachine.extended.web.OrderedTestController.testOrder", @@ -188,7 +188,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()).contains( "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" @@ -207,7 +207,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()).contains( "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" @@ -226,7 +226,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()).contains( "click.kamil.examples.statemachine.extended.config.AbstractBaseConfig.inheritedBeanTester", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" @@ -276,7 +276,7 @@ class JdtCallGraphEngineIntegrationTest { .build(); List chains = engine.findChains(List.of(ep), List.of(tp)); - assertThat(chains).isNotEmpty(); + System.out.println("CHAINS FOUND: " + chains.size()); assertThat(chains).hasSize(1); assertThat(chains.get(0).getMethodChain()).contains( "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolverTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolverTest.java index 2480dac..e21985a 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolverTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolverTest.java @@ -92,4 +92,129 @@ class SpringDependencyResolverTest { assertThat(resolved).hasSize(1); assertThat(resolved.get(0).getTypeFqn()).isEqualTo("com.example.ServiceB"); } + + @Test + void shouldResolveByOrderWhenOtherFiltersTie() { + registry.addBean(SpringBean.builder() + .typeFqn("com.example.LowestOrderService") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(Integer.MAX_VALUE) // Lowest precedence + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.HighestOrderService") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(Integer.MIN_VALUE) // Highest precedence + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.MiddleOrderService") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(0) + .build()); + + List resolved = resolver.resolve("com.example.PaymentService", null, "someUnknownName"); + + assertThat(resolved).hasSize(1); + assertThat(resolved.get(0).getTypeFqn()).isEqualTo("com.example.HighestOrderService"); + } + + @Test + void shouldResolveByOrderWithCustomValues() { + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceA") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(400) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceB") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(100) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceC") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(2147483647 + 400) // This wraps around in Java due to overflow, but let's test a very large valid value + .build()); + + List resolved = resolver.resolve("com.example.PaymentService", null, "someUnknownName"); + + assertThat(resolved).hasSize(1); + assertThat(resolved.get(0).getTypeFqn()).isEqualTo("com.example.ServiceC"); + } + + @Test + void primaryShouldOverrideOrder() { + registry.addBean(SpringBean.builder() + .typeFqn("com.example.PrimaryButLowestOrder") + .assignableTypes(Set.of("com.example.PaymentService")) + .isPrimary(true) + .order(Integer.MAX_VALUE) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.NotPrimaryButHighestOrder") + .assignableTypes(Set.of("com.example.PaymentService")) + .isPrimary(false) + .order(Integer.MIN_VALUE) + .build()); + + List resolved = resolver.resolve("com.example.PaymentService", null, "someUnknownName"); + + assertThat(resolved).hasSize(1); + assertThat(resolved.get(0).getTypeFqn()).isEqualTo("com.example.PrimaryButLowestOrder"); + } + + @Test + void qualifierShouldOverridePrimaryAndOrder() { + registry.addBean(SpringBean.builder() + .typeFqn("com.example.PrimaryService") + .assignableTypes(Set.of("com.example.PaymentService")) + .isPrimary(true) + .order(Integer.MIN_VALUE) + .qualifiers(Set.of("primary")) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.QualifiedService") + .assignableTypes(Set.of("com.example.PaymentService")) + .isPrimary(false) + .order(Integer.MAX_VALUE) + .qualifiers(Set.of("targetQualifier")) + .build()); + + List resolved = resolver.resolve("com.example.PaymentService", "targetQualifier", "someUnknownName"); + + assertThat(resolved).hasSize(1); + assertThat(resolved.get(0).getTypeFqn()).isEqualTo("com.example.QualifiedService"); + } + + @Test + void shouldReturnMultipleWhenOrderIsTied() { + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceA") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(10) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceB") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(10) + .build()); + + registry.addBean(SpringBean.builder() + .typeFqn("com.example.ServiceC") + .assignableTypes(Set.of("com.example.PaymentService")) + .order(20) + .build()); + + List resolved = resolver.resolve("com.example.PaymentService", null, "someUnknownName"); + + assertThat(resolved).hasSize(2); + assertThat(resolved.stream().map(SpringBean::getTypeFqn)) + .containsExactlyInAnyOrder("com.example.ServiceA", "com.example.ServiceB"); + } } diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java index 44a01e0..b306380 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java @@ -261,6 +261,56 @@ class AstTransitionParserTest { .contains("System.out.println(\"Hello\")"); } + @Test + void shouldExtractInternalLogicForSameFileMethodReturningLambda() { + String source = """ + import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; + import org.springframework.statemachine.guard.Guard; + public class TestClass { + public void configure(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source("S1") + .target("S2") + .guard(guardVarEquals("test")); + } + + protected Guard guardVarEquals(String expected) { + return context -> { + return expected.equals(context.getMessage()); + }; + } + } + """; + MethodDeclaration method = createMethodDeclarationWithBindings(source); + + List transitions = AstTransitionParser.parseTransitions(method, context); + + assertThat(transitions).hasSize(1); + assertThat(transitions.getFirst().getGuard().internalLogic()) + .contains("return expected.equals(context.getMessage());") + .doesNotContain("protected Guard guardVarEquals"); + } + + private MethodDeclaration createMethodDeclarationWithBindings(String source) { + ASTParser parser = ASTParser.newParser(AST.getJLSLatest()); + parser.setKind(ASTParser.K_COMPILATION_UNIT); + parser.setResolveBindings(true); + parser.setBindingsRecovery(true); + parser.setEnvironment(new String[0], new String[0], null, true); + parser.setUnitName("TestClass.java"); + parser.setSource(source.toCharArray()); + CompilationUnit cu = (CompilationUnit) parser.createAST(null); + if (cu.types().isEmpty()) { + return null; + } + TypeDeclaration typeDecl = (TypeDeclaration) cu.types().getFirst(); + MethodDeclaration[] methods = typeDecl.getMethods(); + if (methods.length > 0) { + return methods[0]; + } + return null; + } private MethodDeclaration createMethodDeclaration(String source) { ASTParser parser = ASTParser.newParser(AST.getJLSLatest()); parser.setKind(ASTParser.K_COMPILATION_UNIT); 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 f097d90..66c667a 100644 --- a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json @@ -224,6 +224,17 @@ "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", @@ -268,6 +279,50 @@ "verb" : "POST" }, "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-order", + "className" : "click.kamil.examples.statemachine.extended.web.OrderedTestController", + "methodName" : "testOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderedTestController.java", + "metadata" : { + "path" : "/test-order", + "verb" : "GET" + }, + "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 /test-list", + "className" : "click.kamil.examples.statemachine.extended.web.ListInjectionController", + "methodName" : "testList", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ListInjectionController.java", + "metadata" : { + "path" : "/test-list", + "verb" : "GET" + }, + "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -522,22 +577,22 @@ }, { "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", + "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" : "/api/quirk/primary", - "verb" : "POST" + "path" : "/test-setter", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.FallbackQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], "triggerPoint" : { - "event" : "FALLBACK_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", + "event" : "NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", "sourceModule" : null, "stateMachineId" : null, "sourceState" : null, @@ -546,33 +601,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -600,168 +628,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -789,87 +655,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -897,87 +682,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -1008,17 +712,17 @@ }, { "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", + "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" : "/api/quirk/fallback", - "verb" : "POST" + "path" : "/test-concrete", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], "triggerPoint" : { "event" : "QUALIFIER_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", @@ -1035,17 +739,17 @@ }, { "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", + "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" : "/api/quirk/fallback", - "verb" : "POST" + "path" : "/test-field", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], "triggerPoint" : { "event" : "NAMED_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", 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 b29b8f4..d447574 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 @@ -224,6 +224,17 @@ "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", @@ -268,6 +279,50 @@ "verb" : "POST" }, "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-order", + "className" : "click.kamil.examples.statemachine.extended.web.OrderedTestController", + "methodName" : "testOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderedTestController.java", + "metadata" : { + "path" : "/test-order", + "verb" : "GET" + }, + "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 /test-list", + "className" : "click.kamil.examples.statemachine.extended.web.ListInjectionController", + "methodName" : "testList", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ListInjectionController.java", + "metadata" : { + "path" : "/test-list", + "verb" : "GET" + }, + "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -522,22 +577,22 @@ }, { "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", + "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" : "/api/quirk/primary", - "verb" : "POST" + "path" : "/test-setter", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.FallbackQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], "triggerPoint" : { - "event" : "FALLBACK_EVENT", - "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", + "event" : "NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", "methodName" : "doQuirk", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", "sourceModule" : null, "stateMachineId" : null, "sourceState" : null, @@ -546,33 +601,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -600,168 +628,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.QualifierQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -789,87 +655,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.PrimaryQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -897,87 +682,6 @@ }, "contextMachineId" : null, "matchedTransitions" : null - }, { - "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.NamedQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.FallbackQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null - }, { - "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.ProfiledQuirkService.doQuirk" ], - "triggerPoint" : { - "event" : "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 - }, - "contextMachineId" : null, - "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -1008,17 +712,17 @@ }, { "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", + "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" : "/api/quirk/fallback", - "verb" : "POST" + "path" : "/test-concrete", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], "triggerPoint" : { "event" : "QUALIFIER_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", @@ -1035,17 +739,17 @@ }, { "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", + "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" : "/api/quirk/fallback", - "verb" : "POST" + "path" : "/test-field", + "verb" : "GET" }, "parameters" : [ ] }, - "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], "triggerPoint" : { "event" : "NAMED_EVENT", "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService",