Skip to content

feat: [OSS26] 按方法名查实现 find_implementations_by_method_name (#132) - #149

Open
wryyyds7 wants to merge 4 commits into
antgroup:mainfrom
wryyyds7:feat/oss26-find-implementations-by-method-name-132
Open

feat: [OSS26] 按方法名查实现 find_implementations_by_method_name (#132)#149
wryyyds7 wants to merge 4 commits into
antgroup:mainfrom
wryyyds7:feat/oss26-find-implementations-by-method-name-132

Conversation

@wryyyds7

@wryyyds7 wryyyds7 commented Jul 29, 2026

Copy link
Copy Markdown

概述

实现 find_implementations_by_method_name MCP 工具,给定接口的全限定名 + 方法名(可选形参类型消歧),返回所有实现该方法的位置——包括所在类、方法签名、文件路径、行号。

实现

类索引复用

复用 #128_build_class_index_find_implementations_find_anonymous_impls 确定实现类列表。

Java 方法解析 (_parse_java_methods)

  • _METHOD_PATTERN: 正则匹配 Java 方法定义,支持:
    • 注解 (@Override, @SuppressWarnings("unchecked") 等)
    • 修饰符 (public/protected/private/static/final/synchronized/default/native)
    • abstract 关键字
    • 返回类型 (含泛型 ResponseEntity<User>)
    • 方法名
    • 参数列表
    • throws 子句
    • 方法体 { 或声明 ;
  • 提取: 方法名、返回类型、参数列表、is_abstract、is_override、method_signature

参数列表解析

  • _split_params: 按顶层逗号分割参数列表,忽略泛型尖括号内的逗号 (Map<String, Object> 不被错误分割)
  • _parse_method_params: 从每个参数中提取类型 (去掉参数名、final 修饰符、可变参数 ...)

方法签名构建 (_build_method_signature)

拼接返回类型 + 方法名 + 参数类型列表,如 public ResponseEntity<User> getUser(HttpServletRequest, String)

匿名类方法解析 (_parse_anonymous_class_methods)

  • _find_matching_brace 定位匿名类方法体范围
  • 在匿名类体内提取方法定义

参数类型消歧 (_params_match)

  • 比较用户提供的参数类型列表与实际方法参数类型
  • 支持通配: 用户不传参数类型时匹配所有

测试

  • 单元测试: 方法查找、参数消歧、匿名类方法、找不到、MCP 注册对齐
  • 集成测试: 使用开源项目数据验证
  • 全部通过

Closes #132

wangrenyu.wry and others added 4 commits July 21, 2026 14:03
Implement the unified MCP Server framework as the runtime base for
all upcoming YASA MCP tools (Issue antgroup#129).

Framework:
- Dual transport: stdio (default) / streamable-http
- Tool registration via @mcp_tool decorator + auto-discovery
- Unified input validation (Pydantic), error handling, logging (stderr)
- Health check endpoint GET /healthz in HTTP mode
- Built-in demo tool ping returning server status

Modules:
- yasa_mcp/config.py: CLI args + env var parsing
- yasa_mcp/server.py: FastMCP lifecycle management
- yasa_mcp/registry.py: decorator-based tool auto-registration
- yasa_mcp/transport/http.py: streamable-http + /healthz
- yasa_mcp/tools/ping.py: demo health-check tool
- yasa_mcp/errors.py: unified error codes
- yasa_mcp/logging_config.py: stderr logging with level control

Tests (44 passing):
- test_registry.py: tool registration, auto-discovery, schema
- test_validation.py: param validation, error handling
- test_logging.py: stderr output, format, level filtering
- test_config.py: CLI parsing, env vars, error exit

Docs:
- docs/mcp/requirements.md: functional/non-functional requirements
- docs/mcp/system-design.md: architecture, module design, data flow
- docs/mcp/development-guide.md: step-by-step implementation guide
- yasa_mcp/README.md: usage + Claude Desktop/Cline config examples
- registry.py: prevent duplicate tool registration via __module__ check
- http.py: use app.add_route() instead of direct app.routes manipulation
- http.py: remove unused Route import
- http.py + server.py: pass log_level to uvicorn instead of hardcoding
- errors.py: fix empty string message fallback bug
- test_registry.py: use asyncio.run() instead of deprecated get_event_loop()
- test_validation.py: remove unused imports
- config.py: convert repo_root to absolute path
- logging_config.py: precise logger namespace check
- pyproject.toml: fix build-backend to setuptools.build_meta
- .gitignore: add .venv/ and Python project ignore rules
…p#132)

- Implement method-level interface implementation finder
- Reuse antgroup#128's class index (_build_class_index, _find_implementations)
- Add Java method parsing via regex (annotations, modifiers, return type, params)
- Support method overload disambiguation via parameter_types
- Skip abstract method declarations (only return concrete implementations)
- Detect @OverRide annotation presence
- Build method_signature string (e.g. 'validate(Object): boolean')
- Support anonymous class method parsing
- 26 tests covering: direct impl, overloads, generics, abstract skip,
  indirect inheritance, anonymous class, inner class, empty results,
  parameter matching, MCP registration
@wryyyds7

Copy link
Copy Markdown
Author

#132

@wryyyds7 wryyyds7 changed the title [OSS26] 按方法名查实现 find_implementations_by_method_name (#132) feat: [OSS26] 按方法名查实现 find_implementations_by_method_name (#132) Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[OSS26] 接口方法查实现 find_implementations_by_method_name

1 participant