如何避免“更改此条件,使其不总是评估为“假””

Posted

技术标签:

【中文标题】如何避免“更改此条件,使其不总是评估为“假””【英文标题】:How to avoid "Change this condition so that it does not always evaluate to "false"" 【发布时间】:2021-01-05 03:42:50 【问题描述】:

您好,我正在使用 sonarqube 分析我的代码,并遇到以下方法的错误

    final Boolean active = this.fromApiJsonHelper.extractBooleanNamed(GroupingTypesApiConstants.activeParamName, element);
        if (active != null) 
            if (active.booleanValue()) 
                final LocalDate joinedDate = this.fromApiJsonHelper.extractLocalDateNamed(
                        GroupingTypesApiConstants.activationDateParamName, element);
                baseDataValidator.reset().parameter(GroupingTypesApiConstants.activationDateParamName).value(joinedDate).notNull();
             else 
                // TODO - KW - not using config for now - just supporting move
                // to pending or active out of box.
                final boolean isPendingApprovalEnabled = true;
                if (!isPendingApprovalEnabled) 
                    baseDataValidator.reset().parameter(GroupingTypesApiConstants.activeParamName)
                            .failWithCode(".pending.status.not.allowed");
                
            
         else 
            baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
        

sonarqube 说“在语句“if (!isPendingApprovalEnabled)”中更改此条件,使其不会总是评估为“false”

【问题讨论】:

该代码似乎作为占位符存在。您可以忽略该警告,因为它不是最终代码。 所以我改变了规则?并接受? 为什么要在代码库中放置从未被调用的代码? 我不知道具体的 SonarCube 规则,但您可以尝试将标志设为 private static final boolean 字段。我已经多次将其用于条件编译。也许 SonarCube 会毫无征兆地接受这一点。 【参考方案1】:

isPendingApprovalEnabled 永远不会为假,因为它在前面的行中使用true 进行了初始化。只要前面的那行是这样实现的,if语句就是死代码。

您可以删除该代码(并在支持配置时重新引入)或用方法替换变量。

  /* ... */
  if (!isPendingApprovalEnabled()) 
  /* ... */


private boolean isPendingApprovalEnabled() 
  // TODO - KW - not using config for now
  return true;

【讨论】:

以上是关于如何避免“更改此条件,使其不总是评估为“假””的主要内容,如果未能解决你的问题,请参考以下文章

声纳 更改此条件,使其不总是评估为“真”。假阳性

更改此条件,使其不总是评估为“真”

声纳误报,“改变条件,使其并不总是评估为真。”

假阳性 假阴性 和 避免犯第一类错误和第二类错误的情况

drupal如何避免发邮件

水平扩展写入时如何避免并发问题?