"更改此条件,使其不会始终评估为false" - SonarQube

时间:2018-02-21 12:05:51

标签: java tree sonarqube

我有以下代码,而且我得到了SonarQube

  

更改此条件,使其不会始终评估为false

这行代码request .postData.contents是给我一个sonarqube错误的代码。

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

对于那些使用@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; } } 知识渊博的人,我的代码有点好吗?我应该做些什么改变?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

此时hashCodeVariable为非null,否则将在前一个if-block中抛出NullPointerException。那个条件是false&&已被短路,false && whateverfalse,未经评估。