SonarQube FileSystem.inputFile returns 索引文件访问为空

SonarQube FileSystem.inputFile returns null on indexed file access

我正在为 SonarQube 5.6 开发一个插件,但由于 InputFile 对象而无法创建 Issuable 对象。在传感器执行时,我可以看到所有通过调用

编入索引(通过迭代)的文件
Iterator<InputFile> files = fileSystem.inputFiles(p.and(p.hasLanguage("java"), p.hasType(InputFile.Type.MAIN))).iterator();

但是当我尝试使用

访问特定文件(索引并显示在之前)时
java.io.File file = new java.io.File(path);
// file.exists() returns true
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().is(file));

"inputFile" 为空。即使我尝试使用此指令编写路径 returns null:

InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().hasPath(file.getAbsolutePath()));

这是我得到的日志,真的很奇怪:

[INFO] File exists.
[INFO] That file AbsolutePath: C:\Program Files (x86)\Jenkins\workspace\soapui\soapui\src\main\java\com\eviware\soapui\impl\wsdl\support\wsdl\AbstractWsdlDefinitionLoader.java
[ERROR] File "C:\Program Files (x86)\Jenkins\workspace\soapui\soapui\src\main\java\com\eviware\soapui\impl\wsdl\support\wsdl\AbstractWsdlDefinitionLoader.java" is not indexed. Skip it.

令人恼火的事实是,如果不更改此方法(仅用于 return InputFile 对象),这曾经有效但现在不知何故无效。我承认问题可能出在请求的 FilePredicates 上。 任何帮助表示赞赏。提前致谢。

编辑: 忘了提到一个奇怪的事实,即在使用完全相同的指令显示所有索引文件后,如果我再次尝试使用它(为了访问InputFile,我正在寻找),迭代器 returned 甚至不能前进一次:

Iterator<InputFile> files = fileSystem.inputFiles(p.and(p.hasLanguage("java"), p.hasType(InputFile.Type.MAIN))).iterator();

所以碰巧插件按预期停止工作而源代码没有更改的原因是,与以前不同,我试图 运行 对包含一些子项目的项目进行分析(上面的模块)。显然这是我没有意识到的 SonarQube 本身的问题(或限制)。此限制记录在以下文件中 Jira ticket.

所以在我将根项目拆分成单独的项目后,一切运行像以前一样顺利。

真正令人震惊的运行事实是 SonarQube 引擎的行为,因为它为所有项目的所有文件编制了索引,但随后无法访问它们。