首页 > 解决方案 > 如何避免在 IntelliJ IDEA 中使用 Structural Search 命令在声明时将子实例分配给父类类型变量?

问题描述

我正在尝试基于结构搜索创建检查,以避免将 ExecutorService 初始化为 Executor 变量。

以下是我的模板:

<searchConfiguration name="Use an ExecutorService variable to initialize instead of Executor" text="Executor $x$ = $y$;" recursive="true" caseInsensitive="true" type="JAVA" >
<constraint name="__context__" within="" contains="" />
<constraint name="x" nameOfExprType="java\.util\.concurrent\.Executor" within="" contains="" />
<constraint name="y" nameOfExprType="java\.util\.concurrent\.ExecutorService"  within="" contains="" />

我想避免这种初始化的代码:

 private final Executor exec = Execs.singleThreaded("test-%s");

结构搜索没有像我预期的那样工作。我的模板有什么问题?

标签: intellij-ideaintellij-14structural-search

解决方案


我删除了 x 的“nameOfExprType”。有效。

<searchConfiguration name="Use an ExecutorService variable to initialize instead of Executor" text="Executor $x$ = $y$;" recursive="true" caseInsensitive="true" type="JAVA" >
    <constraint name="__context__" within="" contains="" />
    <constraint name="x"  within="" contains="" />
    <constraint name="y" nameOfExprType="java\.util\.concurrent\.ExecutorService" exprTypeWithinHierarchy="true"  within="" contains="" />
  </searchConfiguration>

推荐阅读