這似乎是規則的誤報的一個新例子「有條件執行的塊應該可到達」(squid:S2583)。有誰知道爲什麼SonarQube聲稱if(this.x == 0)
總是在以下Java類中評估爲false
?SonarQube聲稱對於使用「this」訪問的字段總是評估爲false。
public class MyClass {
private long x;
void setX(long x) {
this.x = x;
}
public void decrementX() {
if(this.x > 0) {
this.x--;
if(this.x == 0) { // <-- Always false?!
// apparently dead code
}
}
}
}
顯然可變x
可以設置爲1
然後decrementX()
將進入該確切條件:
@Test
public void testDecrement() {
MyClass c = new MyClass();
c.setX(1);
c.decrementX();
}
(與SonarJava插件SonarQube服務器5.6.6上執行4.13.0.11627)
更新:如Absurd-Mind所述,當this.x
縮短爲x
時,SonarQube很高興。在我看來,這是一個假陽性。
這不應該有影響,但是當你移除'this.'時你會得到相同的結果嗎? –
我在沒有'this.'的情況下試過了,這真的有所作爲!只有荒謬的想法纔會想到這個...... – dokaspar
這聽起來像一個錯誤。你應該考慮通過https://jira.sonarsource.com/browse/SONARJAVA/?selectedTab=com.atlassian.jira.jira-projects-plugin:issues-panel發佈一個bug來作爲回答併發佈一個鏈接到你的bugticket還有更新「刪除這個」。在答案中。這真的會幫助其他人,並會給你一個更新:) –