Eclipse「Open Call Hierarchy」编辑方法参数后无法识别旧调用
解决Eclipse修改方法参数后无法找到旧调用的问题
这个问题我之前帮同事踩过坑——手动改了方法签名加参数后,旧的调用因为参数不匹配,「Open Call Hierarchy」就直接忽略了,确实很闹心。给你几个实用的解决办法:
用Java Search的模糊匹配功能
这是最直接的办法:- 按下
Ctrl+H打开搜索面板,切换到「Java」标签页 - 在搜索框里输入你的方法名
X - 「Search For」选择「Method References」,「Limit To」选「Workspace」(或者你需要的范围)
- 点击面板右下角的「More Options」,找到「Match method signatures」选项,把它改成「Match method name only」
- 点击「Search」,这样所有调用过
X方法的地方(不管参数对不对)都会被搜出来,你就能轻松找到那些没更新的旧调用了
- 按下
用版本控制对比历史(如果有)
如果你用了Git这类版本控制工具:- 在Eclipse里找到修改方法的那个类文件,右键选「Team -> Show History」
- 找到修改方法签名之前的历史版本,右键选「Compare With -> Current Version」
- 从历史版本里复制旧的方法签名(比如
X(a, b, c)),然后用全局搜索(Ctrl+H的File Search)搜这个完整的调用格式,就能定位到所有没更新的地方
下次改签名用重构功能(预防为主)
其实最好的办法是从根源避免这个问题:不要手动修改方法参数,而是用Eclipse的重构功能:- 选中方法名
X,右键选「Refactor -> Change Method Signature」 - 在弹出的窗口里添加新参数
d,设置好参数名、类型和默认值(如果需要) - 点击「Preview」可以看到所有会被修改的调用位置,确认后点击「OK」,Eclipse会自动帮你更新所有调用、子类实现甚至接口定义,完全不会遗漏旧调用
- 选中方法名
正则表达式全局搜索
如果上面的方法都不适用,可以用正则表达式精准匹配旧调用:- 按下
Ctrl+H打开搜索面板,切换到「File Search」标签页 - 搜索框输入正则表达式
X\(a, b, c\)(如果参数是变量名可能需要调整,比如X\([^,]+, [^,]+, [^)]+\)匹配三个参数的调用) - 勾选「Regular expression」,选择搜索范围为「Workspace」,就能找到所有符合旧参数格式的调用
- 按下
内容的提问来源于stack exchange,提问作者Pedro Fontanarrosa




