void (@NotNull PsiFile file, @NotNull Document documentRange, @NotNull PsiElement element, @NotNull List<? extends IntentionAction> fixes, @NotNull HighlightInfo info, @NotNull String shortName, @NotNull Consumer<? super HighlightInfo> outInfos) { // todo we got to separate our "internal" prefixes/suffixes from user-defined ones // todo in the latter case the errors should be highlighted, otherwise not List<TextRange> editables = myInjectedLanguageManager.intersectWithAllEditableFragments(file, new TextRange(info.startOffset, info.endOffset)); for (TextRange editable : editables) { TextRange hostRange = ((DocumentWindow)documentRange).injectedToHost(editable); int start = hostRange.getStartOffset(); int end = hostRange.getEndOffset(); HighlightInfo.Builder builder = HighlightInfo.newHighlightInfo(info.type).range(element, start, end); String description = info.getDescription(); if (description != null) { builder.description(description); } String toolTip = info.getToolTip(); if (toolTip != null) { builder.escapedToolTip(toolTip); } if (start != end || info.startOffset == info.endOffset) { registerQuickFixes(builder, fixes, shortName); HighlightInfo patched = builder.createUnconditionally(); patched.markFromInjection(); patched.toolId = info.toolId; outInfos.accept(patched); } } }