boolean (@NotNull Object parentId, @NotNull MavenParsingContext parsingContext, @NotNull MavenLogEntryReader.MavenLogEntry logLine, @NotNull MavenLogEntryReader logEntryReader, @NotNull Consumer<? super BuildEvent> messageConsumer) { String line = logLine.getLine(); if (line.endsWith("java.lang.OutOfMemoryError")) { messageConsumer.accept(new MessageEventImpl(parentId, MessageEvent.Kind.ERROR, myMessageGroup, RunnerBundle.message("build.event.message.out.memory"), line)); return true; } int fileNameIdx = line.indexOf("." + myExtension + ":"); if (fileNameIdx < 0) { return false; } int fullFileNameIdx = line.indexOf(":", fileNameIdx); if (fullFileNameIdx < 0) { return false; } String targetFileNameWithoutExtension = line.substring(0, fileNameIdx); String localFileNameWithoutExtension = parsingContext.getTargetFileMapper().apply(targetFileNameWithoutExtension); String filename = FileUtil.toSystemDependentName(localFileNameWithoutExtension + "." + myExtension); File parsedFile = new File(filename); String lineWithPosition = line.substring(fullFileNameIdx); Matcher matcher = getMatcher(lineWithPosition); String message; FilePosition position; if (matcher == null) { position = new FilePosition(parsedFile, 0, 0); message = lineWithPosition; } else { position = withLineAndColumn(parsedFile, matcher); message = lineWithPosition.substring(matcher.end()); } String errorMessage = getErrorMessage(position, message); messageConsumer .accept(new FileMessageEventImpl(parentId, MessageEvent.Kind.ERROR, myMessageGroup, errorMessage, errorMessage, position)); return true; }