为什么 sonar-runner 分析在 "Updating semaphore" 处陷入无限循环

Why is sonar-runner analysis stuck in infinite loop at "Updating semaphore"

在启用调试的情况下,我从命令行看到了无数这样的信息:

15:10:18.796 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:10:22.592 DEBUG - Updating semaphore batch-product:Trunk
15:10:28.797 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:10:32.595 DEBUG - Updating semaphore batch-product:Trunk
15:10:38.798 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:10:42.597 DEBUG - Updating semaphore batch-product:Trunk
15:10:48.799 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:10:52.598 DEBUG - Updating semaphore batch-product:Trunk
15:10:58.799 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:11:02.600 DEBUG - Updating semaphore batch-product:Trunk
15:11:08.800 INFO  - 1742/58318 files analyzed, current is C:\work\product\product-dao\src\company\product\dao\account\correspondence\MFLetterCommissionStatmntDAO.java
15:11:12.602 DEBUG - Updating semaphore batch-product:Trunk

提到的具体 class 很小(约 100 行)但确实包含一些 'interesting' 代码 - 这可能是问题所在吗?

它是机器翻译的 Powerbuilder sql 所以看起来有点奇怪:

wkcm_sql_queue sqlq = new wkcm_sql_queue();
ins = new SqlInsert();
ins.INSERT(
  sqlq.sqlq_statement(),
  sqlq.sqlq_execution_date(),
  sqlq.sqlq_system_code())
.SELECT(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(ADD(new Literal("EXEC CMLetter_LetterRequest "), TO_CHAR(letgPrcsCodeId)), new Literal(" ")), new Literal(",")), new Literal("NULL,")), TO_CHAR(dsetClientId)), new Literal(" ")), new Literal(",")), new Literal("NULL,")), TO_CHAR(clpnCbcsCodeId)), new Literal(" ")), new Literal(",")), new Literal("NULL,")), new Literal("NULL,")), new Literal("NULL,")), new Literal("NULL,")), new Literal("NULL,")), new Literal("\"")), TO_CHAR(startDateIn)), new Literal("\"")), new Literal(",")), new Literal("\"")), TO_CHAR(endDateIn)), new Literal("\"")), new Literal(",")), new Literal("NULL")), 
  GET_SYSTEM_DATE(), 
  new Literal("MSTF").AS("col1"));

Database.insert(ins);            

剩下的代码相对简单。

有人能帮忙吗? 谢谢

这确实是解析器的一个已知性能问题:http://jira.codehaus.org/browse/SONARJAVA-793

同时,如果性能不可接受,您可以使用 SonarQube 排除机制 (http://docs.sonarqube.org/x/AgAe) 从分析中排除该特定文件。