update 1
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,388 +0,0 @@
|
|||||||
{
|
|
||||||
"metadata" : {
|
|
||||||
"triggers" : [ {
|
|
||||||
"event" : "event",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 25
|
|
||||||
}, {
|
|
||||||
"event" : "eventProvider",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessageWithProvider",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 50
|
|
||||||
}, {
|
|
||||||
"event" : "customMessage",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendCustomMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 69
|
|
||||||
} ],
|
|
||||||
"entryPoints" : [ {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/process",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "processOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/process",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
}, {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/complete",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "completeOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/complete",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
}, {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/cancel",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "cancelOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/cancel",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
}, {
|
|
||||||
"type" : "RABBIT",
|
|
||||||
"name" : "RABBIT: order.custom.transition.queue",
|
|
||||||
"className" : "click.kamil.web.RabbitOrderListener",
|
|
||||||
"methodName" : "handleCustomTransition",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/RabbitOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "RABBIT",
|
|
||||||
"destination" : "order.custom.transition.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "payload",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.process.queue",
|
|
||||||
"className" : "click.kamil.web.JmsOrderListener",
|
|
||||||
"methodName" : "receiveProcessCommand",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.process.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.cancel.queue",
|
|
||||||
"className" : "click.kamil.web.JmsOrderListener",
|
|
||||||
"methodName" : "receiveCancelCommand",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.cancel.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
} ],
|
|
||||||
"callChains" : [ {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/process",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "processOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/process",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.OrderController.processOrder", "click.kamil.service.StateMachineServiceImpl.sendMessageWithOutbox", "click.kamil.service.StateMachineServiceImpl.sendMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.PROCESS",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 25
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.NEW",
|
|
||||||
"targetState" : "OrderState.PROCESSING",
|
|
||||||
"event" : "OrderEvent.PROCESS"
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/complete",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "completeOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/complete",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.OrderController.completeOrder", "click.kamil.service.StateMachineServiceImpl.sendMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.COMPLETE",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 25
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.PROCESSING",
|
|
||||||
"targetState" : "OrderState.COMPLETED",
|
|
||||||
"event" : "OrderEvent.COMPLETE"
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /api/orders/cancel",
|
|
||||||
"className" : "click.kamil.web.OrderController",
|
|
||||||
"methodName" : "cancelOrder",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/OrderController.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/api/orders/cancel",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.OrderController.cancelOrder", "click.kamil.service.StateMachineServiceImpl.sendMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.CANCEL",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 25
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.NEW",
|
|
||||||
"targetState" : "OrderState.CANCELLED",
|
|
||||||
"event" : "OrderEvent.CANCEL"
|
|
||||||
}, {
|
|
||||||
"sourceState" : "OrderState.PROCESSING",
|
|
||||||
"targetState" : "OrderState.CANCELLED",
|
|
||||||
"event" : "OrderEvent.CANCEL"
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "RABBIT",
|
|
||||||
"name" : "RABBIT: order.custom.transition.queue",
|
|
||||||
"className" : "click.kamil.web.RabbitOrderListener",
|
|
||||||
"methodName" : "handleCustomTransition",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/RabbitOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "RABBIT",
|
|
||||||
"destination" : "order.custom.transition.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "payload",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.RabbitOrderListener.handleCustomTransition", "click.kamil.service.StateMachineServiceImpl.sendCustomMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.PROCESS",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendCustomMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 69
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.NEW",
|
|
||||||
"targetState" : "OrderState.PROCESSING",
|
|
||||||
"event" : "OrderEvent.PROCESS"
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.process.queue",
|
|
||||||
"className" : "click.kamil.web.JmsOrderListener",
|
|
||||||
"methodName" : "receiveProcessCommand",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.process.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.JmsOrderListener.receiveProcessCommand", "click.kamil.service.StateMachineServiceImpl.sendMessageWithOutbox", "click.kamil.service.StateMachineServiceImpl.sendMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.PROCESS",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessage",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 25
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.NEW",
|
|
||||||
"targetState" : "OrderState.PROCESSING",
|
|
||||||
"event" : "OrderEvent.PROCESS"
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.cancel.queue",
|
|
||||||
"className" : "click.kamil.web.JmsOrderListener",
|
|
||||||
"methodName" : "receiveCancelCommand",
|
|
||||||
"sourceFile" : "web/src/main/java/click/kamil/web/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.cancel.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.web.JmsOrderListener.receiveCancelCommand", "click.kamil.service.StateMachineServiceImpl.sendMessageWithProvider" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"event" : "OrderEvent.CANCEL",
|
|
||||||
"className" : "click.kamil.service.StateMachineServiceImpl",
|
|
||||||
"methodName" : "sendMessageWithProvider",
|
|
||||||
"sourceFile" : "service/src/main/java/click/kamil/service/StateMachineServiceImpl.java",
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 50
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "OrderState.NEW",
|
|
||||||
"targetState" : "OrderState.CANCELLED",
|
|
||||||
"event" : "OrderEvent.CANCEL"
|
|
||||||
}, {
|
|
||||||
"sourceState" : "OrderState.PROCESSING",
|
|
||||||
"targetState" : "OrderState.CANCELLED",
|
|
||||||
"event" : "OrderEvent.CANCEL"
|
|
||||||
} ]
|
|
||||||
} ],
|
|
||||||
"properties" : {
|
|
||||||
"default" : { }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"name" : "click.kamil.domain.StateMachineConfig",
|
|
||||||
"renderChoicesAsDiamonds" : true,
|
|
||||||
"startStates" : [ "OrderState.NEW" ],
|
|
||||||
"transitions" : [ {
|
|
||||||
"type" : "EXTERNAL",
|
|
||||||
"sourceStates" : [ {
|
|
||||||
"rawName" : "OrderState.NEW",
|
|
||||||
"fullIdentifier" : "OrderState.NEW"
|
|
||||||
} ],
|
|
||||||
"targetStates" : [ {
|
|
||||||
"rawName" : "OrderState.PROCESSING",
|
|
||||||
"fullIdentifier" : "OrderState.PROCESSING"
|
|
||||||
} ],
|
|
||||||
"event" : {
|
|
||||||
"rawName" : "OrderEvent.PROCESS",
|
|
||||||
"fullIdentifier" : "OrderEvent.PROCESS"
|
|
||||||
},
|
|
||||||
"guard" : null,
|
|
||||||
"actions" : [ ],
|
|
||||||
"order" : null
|
|
||||||
}, {
|
|
||||||
"type" : "EXTERNAL",
|
|
||||||
"sourceStates" : [ {
|
|
||||||
"rawName" : "OrderState.PROCESSING",
|
|
||||||
"fullIdentifier" : "OrderState.PROCESSING"
|
|
||||||
} ],
|
|
||||||
"targetStates" : [ {
|
|
||||||
"rawName" : "OrderState.COMPLETED",
|
|
||||||
"fullIdentifier" : "OrderState.COMPLETED"
|
|
||||||
} ],
|
|
||||||
"event" : {
|
|
||||||
"rawName" : "OrderEvent.COMPLETE",
|
|
||||||
"fullIdentifier" : "OrderEvent.COMPLETE"
|
|
||||||
},
|
|
||||||
"guard" : null,
|
|
||||||
"actions" : [ ],
|
|
||||||
"order" : null
|
|
||||||
}, {
|
|
||||||
"type" : "EXTERNAL",
|
|
||||||
"sourceStates" : [ {
|
|
||||||
"rawName" : "OrderState.NEW",
|
|
||||||
"fullIdentifier" : "OrderState.NEW"
|
|
||||||
} ],
|
|
||||||
"targetStates" : [ {
|
|
||||||
"rawName" : "OrderState.CANCELLED",
|
|
||||||
"fullIdentifier" : "OrderState.CANCELLED"
|
|
||||||
} ],
|
|
||||||
"event" : {
|
|
||||||
"rawName" : "OrderEvent.CANCEL",
|
|
||||||
"fullIdentifier" : "OrderEvent.CANCEL"
|
|
||||||
},
|
|
||||||
"guard" : null,
|
|
||||||
"actions" : [ ],
|
|
||||||
"order" : null
|
|
||||||
}, {
|
|
||||||
"type" : "EXTERNAL",
|
|
||||||
"sourceStates" : [ {
|
|
||||||
"rawName" : "OrderState.PROCESSING",
|
|
||||||
"fullIdentifier" : "OrderState.PROCESSING"
|
|
||||||
} ],
|
|
||||||
"targetStates" : [ {
|
|
||||||
"rawName" : "OrderState.CANCELLED",
|
|
||||||
"fullIdentifier" : "OrderState.CANCELLED"
|
|
||||||
} ],
|
|
||||||
"event" : {
|
|
||||||
"rawName" : "OrderEvent.CANCEL",
|
|
||||||
"fullIdentifier" : "OrderEvent.CANCEL"
|
|
||||||
},
|
|
||||||
"guard" : null,
|
|
||||||
"actions" : [ ],
|
|
||||||
"order" : null
|
|
||||||
} ],
|
|
||||||
"endStates" : [ "OrderState.COMPLETED", "OrderState.CANCELLED" ]
|
|
||||||
}
|
|
||||||
@@ -164,6 +164,20 @@ public class CallGraphBuilder {
|
|||||||
for (String calledMethod : calledMethods) {
|
for (String calledMethod : calledMethods) {
|
||||||
graph.computeIfAbsent(currentMethodFqn, k -> new ArrayList<>()).add(new CallEdge(calledMethod, args));
|
graph.computeIfAbsent(currentMethodFqn, k -> new ArrayList<>()).add(new CallEdge(calledMethod, args));
|
||||||
}
|
}
|
||||||
|
for (Object argObj : node.arguments()) {
|
||||||
|
if (argObj instanceof ExpressionMethodReference emr) {
|
||||||
|
String typeName = emr.getExpression().toString();
|
||||||
|
if ("this".equals(typeName) || "super".equals(typeName)) {
|
||||||
|
TypeDeclaration td = findEnclosingType(node);
|
||||||
|
if (td != null) {
|
||||||
|
String refMethod = resolveMethodInType(td, emr.getName().getIdentifier());
|
||||||
|
if (refMethod != null) {
|
||||||
|
graph.computeIfAbsent(currentMethodFqn, k -> new ArrayList<>()).add(new CallEdge(refMethod, args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.visit(node);
|
return super.visit(node);
|
||||||
}
|
}
|
||||||
@@ -216,6 +230,21 @@ public class CallGraphBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (expr instanceof ExpressionMethodReference emr) {
|
||||||
|
TypeDeclaration td = findEnclosingType(expr);
|
||||||
|
if (td != null) {
|
||||||
|
MethodDeclaration md = context.findMethodDeclaration(td, emr.getName().getIdentifier(), true);
|
||||||
|
if (md != null && md.getBody() != null) {
|
||||||
|
for (Object stmtObj : md.getBody().statements()) {
|
||||||
|
if (stmtObj instanceof ReturnStatement rs && rs.getExpression() != null) {
|
||||||
|
expr = rs.getExpression();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Extract from constructor args (e.g., new CustomMessage(OrderEvent.PROCESS, ...))
|
// Extract from constructor args (e.g., new CustomMessage(OrderEvent.PROCESS, ...))
|
||||||
expr = traceVariable(expr);
|
expr = traceVariable(expr);
|
||||||
if (expr instanceof ClassInstanceCreation cic) {
|
if (expr instanceof ClassInstanceCreation cic) {
|
||||||
|
|||||||
Reference in New Issue
Block a user