【问题标题】:How to find implicit usages of toString() method for specific type如何查找特定类型的 toString() 方法的隐式用法
【发布时间】:2016-12-23 21:58:24
【问题描述】:

最近,我将代码中处理密码的所有位置从 String 更改为新的 Password 类。 Password.toString() 方法现在只打印 [********]。如果我想得到密码,我必须打电话给Password.getPassword()。这样我就可以确保密码不会被意外写入日志文件。

在更改期间,我错过了更改一些如下所示的行:

String.format( "user:%s", password );

在我更改之前password 的类型为String,因此它已根据需要进行了格式化。但是在我更改password 之后,它被渲染为[*******]。这正是我想要的。但现在我想自动找到所有这些地方。

我尝试使用 fb-contrib 插件 (ITU_INAPPROPRIATE_TOSTRING_USE) 使用 findbugs,但没有发现在 String.format() 中隐式使用 Password.toString()

有人知道另一个 findbugs contrib 项目或任何其他静态代码分析器可以找到这些代码位置吗?

【问题讨论】:

    标签: java tostring static-analysis findbugs


    【解决方案1】:

    ITU 仅发现使用 toString() 来推断内容的值,例如,如果您正在解析它以获得某个值,或者使用它来构建一些其他字符串。检测器可以让您知道实际上您不应该依赖 toString() 的内容,因为在许多情况下它应该被视为“调试”输出。 (如你所见)。

    有很多误报只是为了检查 toString() 的使用,它总是有效的。

    不,不知道任何检测器,尽管编写一个检测器很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多