MATCH (c :Class )- [ : CONTAINS ] -> (m :Method )
WHERE c .annotations CONTAINS 'RestController' OR c .annotations CONTAINS 'Controller'
RETURN c .name as class_name , c .full_name as class_full_name , c .annotations as class_annotations ,
m .name as method_name , m .signature as method_signature , m .id as method_id
ORDER BY c .name , m .name
MATCH (caller :Method )- [ : CALLS ] -> (callee :Method )
WHERE caller .id IN $method_ids
MATCH (caller )- [ : CONTAINS ] - (caller_class :Class )
MATCH (callee )- [ : CONTAINS ] - (callee_class :Class )
WHERE caller_class .annotations CONTAINS 'RestController' OR caller_class .annotations CONTAINS 'Controller'
RETURN caller_class .name as caller_class , caller .name as caller_method ,
callee_class .name as callee_class , callee .name as callee_method ,
caller .signature as caller_signature , callee .signature as callee_signature
ORDER BY caller_class .name , caller .name
3. 查询Controller类的完整调用链(多层调用)
MATCH (caller :Method )- [ : CALLS *1..5 ] -> (callee :Method )
WHERE caller .id IN $method_ids
MATCH (caller )- [ : CONTAINS ] - (caller_class :Class )
MATCH (callee )- [ : CONTAINS ] - (callee_class :Class )
RETURN caller_class .name as start_class , caller .name as start_method ,
collect ({ callee_class : callee_class .name , callee_method : callee .name , depth : length (shortestPath ((caller )- [: CALLS * 1 ..20 ]- > (callee )))} ) as call_chain
ORDER BY start_class , start_method
MATCH (caller :Method )- [ : CALLS ] -> (callee :Method )
WHERE caller .id IN $method_ids
MATCH (caller )- [ : CONTAINS ] - (caller_class :Class )
MATCH (callee )- [ : CONTAINS ] - (callee_class :Class )
RETURN caller_class .name as controller_class ,
count (DISTINCT caller ) as method_count ,
count (* ) as total_calls ,
collect (DISTINCT callee_class .name ) as called_classes
ORDER BY total_calls DESC
MATCH path = (caller :Method )- [ : CALLS *2..10 ] -> (caller )
WHERE caller .id IN $method_ids
MATCH (caller )- [ : CONTAINS ] - (caller_class :Class )
RETURN caller_class .name as class_name , caller .name as method_name ,
length (path ) as cycle_length ,
[n in nodes (path ) | (n )- [ : CONTAINS ] - (class :Class ) | class .name + "." + n .name ] as cycle_path
MATCH (caller :Method )- [ : CALLS ] -> (callee :Method )
WHERE caller .id IN $method_ids
MATCH (caller )- [ : CONTAINS ] - (caller_class :Class )
MATCH (callee )- [ : CONTAINS ] - (callee_class :Class )
WHERE NOT (caller_class .annotations CONTAINS 'RestController' OR caller_class .annotations CONTAINS 'Controller' )
RETURN caller_class .name as controller_class , caller .name as controller_method ,
callee_class .name as service_class , callee .name as service_method ,
callee_class .annotations as service_annotations
ORDER BY controller_class .name , controller_method
7. 查询Controller类的HTTP端点映射
MATCH (c :Class )- [ : CONTAINS ] -> (m :Method )
WHERE c .annotations CONTAINS 'RestController' OR c .annotations CONTAINS 'Controller'
AND m .annotations IS NOT NULL
RETURN c .name as class_name , m .name as method_name , m .annotations as method_annotations
ORDER BY class_name , method_name
基本Controller类查询 : 使用查询1获取所有Controller类及其方法
方法调用关系 : 使用查询2获取Controller方法之间的直接调用关系
多层调用链 : 使用查询3获取完整的调用链,可以调整深度参数
统计分析 : 使用查询4获取调用统计信息
循环依赖检测 : 使用查询5检测可能的循环依赖
外部服务调用 : 使用查询6查看Controller调用的外部服务
HTTP端点 : 使用查询7查看Controller的HTTP映射注解
$method_ids: Controller方法的ID列表,可以从查询1结果中获取
深度参数: *1..5 表示1到5层的调用深度,可以根据需要调整