void (PsiFile file, @NotNull PsiElement location, String suppressComment, Function<? super String, String> replace) { final Project project = file.getProject(); final VirtualFile vfile = file.getVirtualFile(); if (vfile == null || ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(Collections.singletonList(vfile)).hasReadonlyFiles()) { return; } final Document doc = PsiDocumentManager.getInstance(project).getDocument(file); assert doc != null; PsiElement leaf = location.getPrevSibling(); while (leaf instanceof PsiWhiteSpace) leaf = leaf.getPrevSibling(); while (leaf instanceof PsiComment || leaf instanceof PsiWhiteSpace) { @NonNls String text = leaf.getText(); if (text.matches("\n*#\\s*suppress\\s.+")) { final TextRange textRange = leaf.getTextRange(); doc.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), replace.fun(text)); return; } leaf = leaf.getPrevSibling(); } final int offset = location.getTextRange().getStartOffset(); doc.insertString(offset, suppressComment + "\n"); CodeStyleManager.getInstance(project).adjustLineIndent(doc, offset + suppressComment.length()); // UndoManager.getInstance(file.getProject()).markDocumentForUndo(file); }