https://codeql.github.com/docs/codeql-language-guides/basic-query-for-java-code/

开始

对if语句中的冗余代码进行搜索,例如空的then分支,示例代码如下

  1. if(error){ }

编写查询语句如下所示

  1. import java
  2. from IfStmt ifstmt, BlockStmt block
  3. where ifstmt.getThen() = block and
  4. block.getNumStmt() = 0
  5. select ifstmt, "This 'if' statement is redundant."

IfStmt
表示一个if语句
BlockStmt
表示一个代码块
ifstmt.getThen() = block
关联if语句的then语句与代码块
block.getNumStmt() = 0
代码块必须为空(它不包含任何任何语句)
在线查看查询结果 https://lgtm.com/query/3235645104630320782/
image.png

优化

在如下示例代码中,空的else if 分支的确有着自己的用途,因此优化查询:
当if语句中具有else分支时,认为空分支有自己的左右,忽略空分支。

  1. if (...) {
  2. ...
  3. } else if ("-verbose".equals(option)) {
  4. // nothing to do - handled earlier
  5. } else {
  6. error("unrecognized option");
  7. }

查询语句优化

  1. import java
  2. from IfStmt ifstmt, BlockStmt block
  3. where ifstmt.getThen() = block and
  4. block.getNumStmt() = 0 and
  5. not exists(ifstmt.getElse())
  6. select ifstmt, "This 'if' statement is redundant."