void (@NotNull ContentDiffRequest request) { // Actually, this should be a valid case. But it has little practical sense and will require explicit checks everywhere. // Some listeners will be processed once instead of 2 times, some listeners will cause illegal document modifications. List<DiffContent> contents = request.getContents(); boolean sameDocuments = false; for (int i = 0; i < contents.size(); i++) { for (int j = i + 1; j < contents.size(); j++) { DiffContent content1 = contents.get(i); DiffContent content2 = contents.get(j); if (!(content1 instanceof DocumentContent)) continue; if (!(content2 instanceof DocumentContent)) continue; sameDocuments |= ((DocumentContent)content1).getDocument() == ((DocumentContent)content2).getDocument(); } } if (sameDocuments) { StringBuilder message = new StringBuilder(); message.append("DiffRequest with same documents detected\n"); message.append(request).append("\n"); for (DiffContent content : contents) { message.append(content).append("\n"); } LOG.warn(message.toString()); } }