https://codeql.github.com/docs/codeql-language-guides/basic-query-for-java-code/
开始
对if语句中的冗余代码进行搜索,例如空的then分支,示例代码如下
if(error){ }
编写查询语句如下所示
import java
from IfStmt ifstmt, BlockStmt block
where ifstmt.getThen() = block and
block.getNumStmt() = 0
select ifstmt, "This 'if' statement is redundant."
IfStmt
表示一个if语句
BlockStmt
表示一个代码块
ifstmt.getThen() = block
关联if语句的then语句与代码块
block.getNumStmt() = 0
代码块必须为空(它不包含任何任何语句)
在线查看查询结果 https://lgtm.com/query/3235645104630320782/
优化
在如下示例代码中,空的else if 分支的确有着自己的用途,因此优化查询:
当if语句中具有else分支时,认为空分支有自己的左右,忽略空分支。
if (...) {
...
} else if ("-verbose".equals(option)) {
// nothing to do - handled earlier
} else {
error("unrecognized option");
}
查询语句优化
import java
from IfStmt ifstmt, BlockStmt block
where ifstmt.getThen() = block and
block.getNumStmt() = 0 and
not exists(ifstmt.getElse())
select ifstmt, "This 'if' statement is redundant."