【问题标题】:IntelliJ Structural Search to find all classes without given declarationsIntelliJ 结构搜索以查找所有没有给定声明的类
【发布时间】:2021-01-22 12:07:46
【问题描述】:

假设我们有一个类

public class MyTest() {
    @Inject private Class1 class1;
    @Inject private Class2 class2;

}

还有一个班级

public class MyTest2() {
    @Inject private Class1 class1;
    @Inject private Class2 class2;
    @Inject private Class3 class3;

}

我想找到注入 class1class2不要 注入 class3 的所有类。我尝试使用 IntelliJ 的结构搜索但卡住了。结构搜索是否可行?

【问题讨论】:

  • 注入是如何工作的,你能举个例子吗?如:在方法或构造函数内部发生的事情不是结构,而是代码
  • @GhostCat,也许我做了一个误导性的标题。假设我要查找所有声明 class1 和 class2 但不声明 class3 的类。

标签: java intellij-idea structural-search


【解决方案1】:

也许通过使用搜索模板:

class $a$ {
  @Inject private Class1 $_1$;
  @Inject private Class1 $_2$;
  $3$;
}

并搜索 $_1$、$_2$ 和 $_3$ 的文本过滤器: 分别

text=class1
text=class2
text=!@Inject private Class1 class3;

【讨论】:

  • 这听起来像是一个可能的解决方案,谢谢!但是,它似乎有其局限性: 1)假设我想排除更多类,这需要一一添加。 2)这个解决方案取决于类声明的顺序。 3) 不清楚text 过滤器是如何工作的。我相信可以通过使用script 过滤器来增强解决方案,但未能找到合适的文档。
  • 只要我记得我检查过它,它不依赖于类声明的顺序
  • 您可能是对的,稍后会检查。但是,它仍然需要定义所有要禁止的类。我正在考虑更多类似these classes are allowed and others are prohibited 的东西。我看到stackoverflow.com/users/4510/bas-leijdekkers 对SSR 了解很多,也许他能指出一个可能的解决方案。 :)
【解决方案2】:

我(仍然)不确定我是否正确理解了这个问题,但您可以尝试以下方法:

class $X$ {
    @Inject private Class1 $a$;
    @Inject private Class2 $b$;
    @Inject private Class3 $c$;
}

并在$c$ 上添加计数过滤器[0,0]

这将找到具有Class1Class2 字段但没有Class3 字段的类。

【讨论】:

  • 抱歉,我在原始消息中有错字。有不同的 Class1 和 Class2,这些注入应该存在,但 Class3 不应该被导入/声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多