Commenter (final PsiFile file, Editor editor, int offset, int endOffset) { final Language languageSuitableForCompleteFragment; if (offset >= endOffset) { // we are on empty line PsiElement element = file.findElementAt(offset); if (element != null) languageSuitableForCompleteFragment = element.getParent().getLanguage(); else languageSuitableForCompleteFragment = null; } else { languageSuitableForCompleteFragment = PsiUtilBase.reallyEvaluateLanguageInRange(offset, endOffset, file); } Commenter blockSuitableCommenter = languageSuitableForCompleteFragment == null ? CommentByBlockCommentHandler.getCommenter(file, editor, file.getLanguage(), file.getLanguage()) : null; if (blockSuitableCommenter == null && file.getFileType() instanceof CustomSyntaxTableFileType) { blockSuitableCommenter = new Commenter() { final SyntaxTable mySyntaxTable = ((CustomSyntaxTableFileType)file.getFileType()).getSyntaxTable(); @Override public @NotNull String getLineCommentPrefix() { return mySyntaxTable.getLineComment(); } @Override @Nullable public String getBlockCommentPrefix() { return mySyntaxTable.getStartComment(); } @Override @Nullable public String getBlockCommentSuffix() { return mySyntaxTable.getEndComment(); } @Override public String getCommentedBlockCommentPrefix() { return null; } @Override public String getCommentedBlockCommentSuffix() { return null; } }; } return blockSuitableCommenter; }