如何用IntelliJ结构化搜索被实例化的无字段工具类?
问题描述
工具类是无状态的,因此不包含字段。我想找出代码中所有被实例化的工具类。已经给已知的所有工具类添加了私有无参构造方法,但仍有一些遗留的旧工具类。刚找到一个,想找出其他同类类,能不能通过Structured Search and Replace(SSR)实现?
编辑补充:
我针对这个问题做了一次SSR尝试(图片展示了我的最佳尝试)。原本以为把$Field$的计数设置为[0,0],就能找出所有包含公共构造方法且无字段的类,但搜索结果却返回了含字段的类,比如下面这个类:
public class HTTPAuthenticationRequest implements InternalMsg { protected String echoData; }
解决方法
可以通过调整SSR的搜索模板来精准匹配目标类,具体操作如下:
构建精准的类搜索模板
使用以下模板代码:public class $Class$ { $Fields$ $Constructors$ $Methods$ }给模板变量设置约束:
$Fields$:设置出现次数为[0,0],确保类里没有任何字段(不管访问修饰符是私有、保护还是公有)$Constructors$:设置必须包含至少一个公共构造方法(工具类一般是无参,也可以针对性约束为无参构造)- 可选:给
$Methods$设置至少包含一个静态方法,进一步匹配工具类的特征
排除业务类干扰
在SSR的「Filters」面板给$Class$加约束:排除实现了业务接口的类(比如例子里的InternalMsg),避免把业务DTO这类带字段的类误搜进来。直接定位被实例化的工具类
还可以搭配另一个SSR模板,专门找被实例化的无字段类:new $ToolClass$($Args$);给
$ToolClass$设置约束:对应的类无字段且有公共构造方法,这样能直接揪出那些被实例化的遗留工具类。
内容的提问来源于stack exchange,提问作者caduceus
相关产品推荐
相关产品推荐

