SonarQube FileSystem.inputFile возвращает null при доступе к индексированному файлу

Я разрабатываю плагин для SonarQube 5.6, и у меня возникают проблемы с созданием объекта Issuable из-за объекта InputFile. При выполнении датчика я вижу все файлы, проиндексированные (путем итерации) с вызовом

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));

«входной файл» имеет значение null. Даже если я пытаюсь составить путь, он возвращает 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.

Раздражает тот факт, что раньше это работало, но теперь почему-то нет, без изменения этого метода (который имеет только цель вернуть объект InputFile). Я допускаю, что проблема может быть в запрошенных FilePredicates. Любая помощь приветствуется. Заранее спасибо.

EDIT: забыл упомянуть тот странный факт, что после использования этой же самой инструкции для отображения всех проиндексированных файлов, если я попытаюсь использовать ее снова (для доступа к искомому входному файлу) , возвращаемый итератор не может продвигаться ни разу:

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

person jonypera    schedule 15.06.2016    source источник
comment
Не могли бы вы указать значение sensorContext.filesystem().baseDir()? Это может быть проблема чувствительности к регистру. Внутри файлы индексируются по относительному пути. Поэтому, когда вы запрашиваете абсолютный путь, мы восстанавливаем полный путь, используя baseDir.   -  person Julien H. - SonarSource Team    schedule 15.06.2016
comment
Значение baseDir(): C:\Program Files (x86)\Jenkins\workspace\soapui Для меня это действительно правильный каталог. Итак, вы предлагаете, чтобы путь, который я указываю при создании объекта File, был относительным к этому baseDir, а не абсолютным путем (как я отправляю сейчас)?   -  person jonypera    schedule 15.06.2016
comment
После некоторого копания (и двух дней работы, когда я бился головой о клавиатуру) я понял, что эта проблема может быть связана с проблемой SonarQube (jira.sonarsource.com/browse/SONAR-6724), потому что проект, который я пытался анализировать, содержал набор подмодулей (вместо предыдущих, которые правильно анализировались) . Имеет ли это смысл?   -  person jonypera    schedule 17.06.2016


Ответы (1)


Так получилось, что причина того, что плагин перестал работать как положено без изменений в исходном коде, заключалась в том, что, в отличие от предыдущего, я пытался запустить анализ проекта с некоторыми подпроектами (модулями на нем). По-видимому, это проблема (или ограничение) самого SonarQube, о котором я не знал. Это ограничение задокументировано в следующем тикете Jira.

Итак, после того, как я разделил корневой проект на отдельные, все пошло гладко, как и раньше.

Действительно странным фактом является поведение движка SonarQube, поскольку он проиндексировал все файлы всех проектов, но затем не смог получить к ним доступ.

person jonypera    schedule 20.06.2016