“更改此条件,使其不会总是评估为假” - SonarQube

Posted

技术标签:

【中文标题】“更改此条件,使其不会总是评估为假” - SonarQube【英文标题】:"Change this condition so that it does not always evaluate to false" - SonarQube 【发布时间】:2018-08-01 00:14:23 【问题描述】:

我有以下代码,我得到一个 SonarQube

更改此条件,使其不会总是评估为假

这行代码 if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) 是给我 sonarqube 错误的代码。

@Override
  public void visitNode(Tree tree) 
    MethodTree mt = null;
    ClassTree classTree = (ClassTree) tree;
    if (!hasSemantic()) 
      return;
    
    for (Tree memberTree : classTree.members()) 
      if (memberTree.kind().name().equals(Kind.METHOD.name())) 
        mt = (MethodTree) memberTree;
        methods.add(mt);
      
    
    storeMethodValue(mt);
  

  public void storeMethodValue(MethodTree mt) 
    String methodName;
    try 
      for (MethodTree method : methods) 
        methodName = PUBLIC + SPACE + method.returnType().symbolType().name()
            + SPACE + method.symbol().name();
        checkMethodName(methodName);
      
      if(hashCodeVariable.equals(HASH_CODE_METHOD) && equalsVariable == null) 
        reportIssue(mt, "in");
        return;
      

      if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) 
        reportIssue(mt, "out");
        return;
      
    
    catch (NullPointerException nullPointer) 
      throw nullPointer;
    
  

  public void checkMethodName(String methodName) 
    if (methodName.equals(EQUALS_METHOD)) 
      equalsVariable = methodName;
     else if (methodName.equals(HASH_CODE_METHOD)) 
      hashCodeVariable = methodName;
    
  

对于那些熟悉使用Tree 的人来说,我的代码还可以吗?我应该做些什么改变?

【问题讨论】:

【参考方案1】:

此时hashCodeVariable 是非空的,因为否则NullPointerException 将在前一个if 块中抛出。那个条件是false&& 是短路的,所以 false && whateverfalse,没有进行任何评估。

【讨论】:

【参考方案2】:

对 hashCodeVariable 的 null 测试毫无意义,因为在第一种情况下使用了 .equals。

 if(hashCodeVariable.equals(HASH_CODE_METHOD) && equalsVariable == null) 
 ...
 if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) 

hashCodeVariable 为 !null,否则在第一个 if 语句中会引发 NullPointerException。所以条件为假。

【讨论】:

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

SONA即将重磅登陆JustSwap开启流动性交易

NBUT 1457 Sona (莫队算法)

sona: Spark on Angel部署教程

sona: Spark on Angel部署教程

sona:Spark on Angel任务启动流程分析

sona:Spark on Angel任务启动流程分析