【问题标题】:SonarQube custom rule for C# NullReferenceException handling用于 C# NullReferenceException 处理的 SonarQube 自定义规则
【发布时间】:2018-02-08 06:40:51
【问题描述】:

我在我的 C# 项目中使用 SonarQube 6.2。我有一个方法可以检查一个对象是 null 还是 nullentity

if (IsNullOrNullEntity(norm))
    sorte.FkNorm = null;
else
    sorte.FkNorm = norm.Pk;

SonarQube 现在向我报告说我可能有一个针对 norm.Pk 的 NullRefenceExpetion -> 但事实并非如此,因为我在 IsNullOrNullEntity() 中检查了这一点。

有没有办法“告诉”SonarQube?

【问题讨论】:

    标签: c# visual-studio-2015 sonarqube


    【解决方案1】:

    没有办法告诉 C# 分析器 IsNullOrNullEntity 方法做了什么,即使它是在同一个类中声明的。我们的数据流分析的当前实现仅在一种方法的范围内工作,并且在给定一些输入的情况下无法识别调用方法的输出。我们将很快增强此功能,但目前我无法确定确切的日期。

    可以做的事情很少:

    • 如果您在连接模式下使用 SonarLint,您可以将 SonarQube 中的问题标记为误报。 SonarLint 将能够在不久的将来(可能在一两个月内)隐藏 Visual Studio 中标记为误报的问题。
    • 不要使用实用方法进行空值检查 - 显然这会引入一些重复,但空值检查会更加准确,在我看来,这条规则是不应禁用的几条高价值规则之一。

    我希望这会有所帮助。

    【讨论】:

    • 我遇到了同样的问题。对于 ReSharper,我可以为我的 null-checker-method 定义 ContractAnnotation,所以我可以说 [ContractAnnotation("dbObject:null => true")] bool IsNull(object dbObject, ...)。如果您可以实施类似的方法以避免误报结果,那将非常有帮助。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2020-08-14
    • 2017-04-08
    • 1970-01-01
    • 2017-03-24
    • 2014-04-22
    • 2017-10-08
    • 2020-06-13
    相关资源
    最近更新 更多