Android Studio中SonarLint规则kotlin:S1125是否为误报?
这属于SonarLint的误报
你的代码逻辑完全合理:Android 13(API 33,TIRAMISU)及以上版本要求POST_NOTIFICATION作为运行时权限,必须检查授权状态;而Android 12及以下版本不需要申请该权限,直接返回true是符合业务场景的。
SonarLint的kotlin:S1125规则在这里属于误判——它仅从语法层面识别到else分支返回了布尔字面量true,但没有理解这个返回值是对应特定Android版本的业务逻辑,并非无意义的冗余代码。
处理方案
你有两种选择:
保留原有代码,忽略误报
通过添加// NOSONAR注释标记该代码,让SonarLint跳过对这一行的规则检查:fun hasNotificationPermission(context: Context): Boolean { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) ContextCompat.checkSelfPermission(context, POST_NOTIFICATION) == PackageManager.PERMISSION_GRANTED else true // Android 12 and below has no runtime permission thus return true // NOSONAR }调整代码写法,规避误报
将条件合并为逻辑或表达式,既保留原逻辑,又让SonarLint识别到代码的合理性:fun hasNotificationPermission(context: Context): Boolean { return Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU || ContextCompat.checkSelfPermission(context, POST_NOTIFICATION) == PackageManager.PERMISSION_GRANTED }
内容的提问来源于stack exchange,提问作者Bitwise DEVS
相关产品推荐
相关产品推荐

