查找toString()方法的所有用法

时间:2013-06-05 14:33:04

标签: java intellij-idea

我有一个庞大的项目,这个类在这个项目的各个地方都被广泛使用。该类定义了toString()方法,该方法输出了大量信息。我想定义另一个方法,比如toShortString(),并用此方法调用替换调用原始toString()的所有匹配项。

问题在于有很多代码如下所示:

log.debug("Order issued: " + order);
log.debug("Loaded list of orders: " + orders);

其中order是此对象的实例,orders是此类对象的列表。

有没有办法找到所有这些事件?

欢迎任何建议。 IDE是IntelliJ Idea,如果重要的话。

3 个答案:

答案 0 :(得分:4)

而不是替换容易出错的toString()的所有出现(你肯定会错过一些)而有些非常难以替换(例如,System.out.println() List Order个对象始终仅调用toString()我建议您修改toString()本身以调用toShortString()

toString()内的所有代码移动到另一个名为toLongString()的函数中,然后使用此函数,您需要对StringOrder个对象进行详细的{{1}}表示。

答案 1 :(得分:3)

只需覆盖toString()课程中的Order方法正文。

从技术上讲,无法找到所有调用,因为即使是系统库也会在很多地方调用toString(),就像所有类型的集合一样。此外,您应该注意您的模板(无论您使用什么GUI。)

因此,您希望记录短打印输出, debug 完整(原始)。两者都在呼叫toString()。然后,您可以尝试查看调用堆栈跟踪内部以确定它的调用位置。使用Thread.currentThread().getStackTrace()访问当前堆栈跟踪。

假设,如果最后10个stacktrace元素中的任何一个来自您Log类,则会调用它进行日志记录,然后您可以打印短打印输出。否则请完整打印输出。

是的,最好将不同版本的toString()移动到不同的方法中。

答案 2 :(得分:0)

我知道我有点晚了,但我在IDEA找到了合法的方式:

  1. 在您的课程中将toString方法标记为@Deprecated
  2. Analyze - > Run inspection by name - >选择Deprecated API usage
  3. 中提琴!它将列出任何已弃用的API的所有用法(希望您不要这样做)当然包括您刚刚注释的toString。别忘了删除注释。

    P.S。不会显示隐式调用