如何用Detekt禁用Kotlin标准库的error()方法调用?
解决Detekt无法捕获kotlin.error()调用的问题
问题根因
kotlin的error()是kotlin包下的顶层函数,你之前的配置写法不符合Detekt ForbiddenMethodCall规则的方法签名匹配规范,导致规则无法精准识别该函数调用。
正确配置方案
ForbiddenMethodCall规则匹配顶层函数时,必须使用完整包名.函数名(参数类型)的格式。针对标准库中error(message: Any)的签名,正确配置如下:
ForbiddenMethodCall: active: true methods: - 'kotlin.io.print' - 'kotlin.io.println' - 'kotlin.error(kotlin.Any)'
原配置失效的原因
error(kotlin.Any)、error()、error、kotlin.error这些写法要么缺失完整包名,要么参数签名不完整,Detekt无法定位到kotlin包下的目标顶层函数。- 顶层函数的匹配必须严格指定完整包路径+函数名+参数类型签名,不能省略任一关键部分。
验证方式
修改配置后执行./gradlew detektMain,代码中所有error("提示文本")或error(任意值)的调用都会被规则捕获。
内容的提问来源于stack exchange,提问作者pr4bh4sh
相关产品推荐
相关产品推荐

