boolean (PsiElement commentElement) { Commenter commenter = LanguageCommenters.INSTANCE.forLanguage(commentElement.getLanguage()); if (commenter instanceof CodeDocumentationAwareCommenter docCommenter) { String lineCommentPrefix = commenter.getLineCommentPrefix(); String blockCommentPrefix = commenter.getBlockCommentPrefix(); String blockCommentSuffix = commenter.getBlockCommentSuffix(); if (commentElement.getNode().getElementType() == docCommenter.getLineCommentTokenType() && blockCommentPrefix != null && blockCommentSuffix != null && lineCommentPrefix != null) { String commentText = StringUtil.trimStart(commentElement.getText(), lineCommentPrefix); String suffix = docCommenter.getBlockCommentSuffix(); if (suffix != null && suffix.length() > 1) { String fixedSuffix = suffix.charAt(0)+" "+suffix.substring(1); commentText = commentText.replace(suffix, fixedSuffix); } if (commentText.startsWith(" ") && !commentText.endsWith(" ")) { // "// foo" should be translated to "/* foo */" not "/* foo*/" commentText += " "; } try { Project project = commentElement.getProject(); PsiParserFacade parserFacade = PsiParserFacade.getInstance(project); PsiComment newComment = parserFacade.createBlockCommentFromText(commentElement.getLanguage(), commentText); commentElement.replace(newComment); return true; } catch (IncorrectOperationException e) { LOG.info("Failed to replace line comment with block comment", e); } } } return false; }