void (@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly, @NotNull CharSequence text, @NotNull Charset charset, @NotNull List<ProblemDescriptor> descriptors) { CharBuffer buffer = CharBuffer.wrap(text); int textLength = text.length(); CharBuffer back = CharBuffer.allocate(textLength); // must be enough, error otherwise Ref<ByteBuffer> outRef = Ref.create(); //do not report too many errors for (int pos = 0, errorCount = 0; pos < text.length() && errorCount < 200; errorCount++) { TextRange errRange = nextUnmappable(buffer, pos, outRef, back, charset); if (errRange == null) break; ProblemDescriptor lastDescriptor = ContainerUtil.getLastItem(descriptors); if (lastDescriptor != null && lastDescriptor.getTextRangeInElement().getEndOffset() == errRange.getStartOffset()) { // combine two adjacent descriptors errRange = lastDescriptor.getTextRangeInElement().union(errRange); descriptors.remove(descriptors.size() - 1); } String message = InspectionsBundle.message("unsupported.character.for.the.charset", charset); ProblemDescriptor descriptor = manager.createProblemDescriptor(file, errRange, message, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly, new ChangeEncodingFix(file)); descriptors.add(descriptor); pos = errRange.getEndOffset(); } }