in src/com/jetbrains/php/tools/quality/phpstan/PhpStanMessageProcessor.java [62:96]
protected void processMessage(InputSource source) throws SAXException, IOException {
PhpStanXmlMessageHandler messageHandler = (PhpStanXmlMessageHandler)getXmlMessageHandler(myFilePath);
mySAXParser.parse(source, messageHandler);
if (messageHandler.isStatusValid()) {
if (myPsiFile != null) {
List<ProblemDescription> list = messageHandler.getProblemList();
if (list == null) return;
for (ProblemDescription problem : list) {
if (myProject.isDisposed()) return;
Document document = ReadAction.compute(() -> PsiDocumentManager.getInstance(myPsiFile.getProject()).getDocument(myPsiFile));
QualityToolMessage qualityToolMessage;
if (document != null && problem.getLineNumber() - 1 > 0 && problem.getLineNumber() - 1 < document.getLineCount()) {
qualityToolMessage = new QualityToolMessage(this, TextRange
.create(document.getLineStartOffset(problem.getLineNumber() - 1) + problem.getColumn(),
document.getLineEndOffset(problem.getLineNumber() - 1)), problem.getSeverity(), problem.getMessage());
}
else {
qualityToolMessage = new QualityToolMessage(this, problem.getLineNumber(), problem.getSeverity(), problem.getMessage());
}
if (lineMessages.add(problem)) {
addMessage(qualityToolMessage);
}
}
} else {
final List<ProblemDescription> data = myProject.getUserData(PHPSTAN_ANNOTATOR_INFO);
if (data != null) {
data.addAll(messageHandler.getProblemList());
myProject.putUserData(PHPSTAN_ANNOTATOR_INFO, data);
}
else {
myProject.putUserData(PHPSTAN_ANNOTATOR_INFO, messageHandler.getProblemList());
}
}
}
}