diff --git a/.gitea/checker/controller_ast_parser.py b/.gitea/checker/controller_ast_parser.py index 2f0e2e5..20e33fe 100644 --- a/.gitea/checker/controller_ast_parser.py +++ b/.gitea/checker/controller_ast_parser.py @@ -257,17 +257,19 @@ def _param_description(param: FormalParameter) -> Optional[str]: def _parse_javadoc_params(source_code: str) -> Dict[str, Dict[str, str]]: """ 使用正则从 Java 源代码中提取方法上的 Javadoc @param 描述。 + 支持方法声明前存在注解(@GetMapping、@ApiOperation 等)的情况。 返回结构: { method_name: { param_name: description } } """ javadoc_map: Dict[str, Dict[str, str]] = {} - # 匹配 Javadoc 块 + 其后的方法声明 - # 简单启发式:Javadoc 后面第一个标识符 + ( 视为方法名 + # 改进正则:允许 Javadoc 后存在零或多个注解,再匹配方法声明 pattern = re.compile( - r'/\*\*(?P.*?)\*/\s*(?:public|private|protected|static|\s)*' - r'[\w<>\[\],\.\s]+\s+(?P\w+)\s*\(', + r'/\*\*(?P.*?)\*/\s*' + r'(?:@\w+(?:\s*\([^)]*\))?\s*)*' # 跳过注解(支持 @GetMapping(...)) + r'(?:public|private|protected|static|final|\s)*' + r'[\w<>\[\],\.\s]+?\s+(?P\w+)\s*\(', re.DOTALL | re.MULTILINE ) @@ -276,11 +278,15 @@ def _parse_javadoc_params(source_code: str) -> Dict[str, Dict[str, str]]: method_name = match.group('method') param_descs: Dict[str, str] = {} - # 提取 @param 行 - param_pattern = re.compile(r'@param\s+(\w+)\s+([^\n@]+)', re.IGNORECASE) + # 提取 @param,支持多行描述(直到下一个 @ 或结束) + param_pattern = re.compile( + r'@param\s+(\w+)\s+((?:(?!\n\s*@).)+)', + re.IGNORECASE | re.DOTALL + ) for p_match in param_pattern.finditer(javadoc_block): p_name = p_match.group(1) - p_desc = p_match.group(2).strip() + # 合并多行空白为单行 + p_desc = ' '.join(p_match.group(2).split()) if p_desc: param_descs[p_name] = p_desc diff --git a/ftb/src/main/java/ftb/test/controller/CultureClockInController.java b/ftb/src/main/java/ftb/test/controller/CultureClockInController.java index 48877ae..8af14f9 100644 --- a/ftb/src/main/java/ftb/test/controller/CultureClockInController.java +++ b/ftb/src/main/java/ftb/test/controller/CultureClockInController.java @@ -137,7 +137,7 @@ public class CultureClockInController { * @return jnpf.base.ActionResult */ @GetMapping(value = "/dynamic1") - public ActionResult getRecordList(@RequestParam(value = "cursorDate", required = false) String cursorDate, + public ActionResult getRecordList(@RequestParam(value = "cursorDate1", required = false) String cursorDate, @RequestParam(value = "limitNum", required = false, defaultValue = "10") Integer limitNum) { limitNum = Math.max(10, Math.min(limitNum, 30));