发布时间:2021-02-18 13:47:59 来源:亿速云 阅读:255 作者:Leah 栏目:开发技术
这期内容当中小编将会给大家带来有关如何在IDEA中快速删除Java代码中的注释,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
在实践之前,我们先要了解Java中的几种注释类型:
下面举个简单例子,说明三种注释的区别:
import java.util.ArrayList;
import java.util.stream.Collectors;
/**
* @author xiaoxi666
* @date 2021-02-15 17:13
* 我是 Javadoc 注释
*/
public class Input {
/**
* 我是 Javadoc 注释
*
* @param param1
* @param param2
*/
public static void someMethod(String param1, // 我是单行注释
String param2
// 我是单行注释 String param3,
/* 我是块注释 String param4,
String param5,
String param6 */
/ 我是块注释 String param4 /)
{
// 我是单行注释
int a = 1;
/ 我是块注释,注意我和Javadoc注释的区别,我只有一个星号 /
int b = 2;
/*
* 我是块注释
*/
int c = 3;
String s1 = "// 我是字符串中的内容,不是注释";
String s2 = "/ 我是字符串中的内容,不是注释 /";
String s3 = "/* 我是字符串中的内容,不是注释 /";
}
}
下面我们实践一下,看看怎么移除源码中的注释。
我这里使用maven管理项目,首先引入JavaParser依赖:
<dependencies>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-symbol-solver-core</artifactId>
<version>3.18.0</version>
</dependency>
</dependencies>
然后编写核心代码:
package core;import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseResult;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.comments.BlockComment;
import com.github.javaparser.ast.comments.Comment;
import com.github.javaparser.ast.comments.LineComment;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author xiaoxi666
* @date 2021-02-15 20:09
* 几个注释的概念:
* LineComment
* BlockComment
* JavadocComment
*/
public final class CommentsRemover {
private CommentsRemover() {}
public static String doAction(String content) {
JavaParser javaParser = createJavaParser();
ParseResult<CompilationUnit> result = javaParser.parse(content);
Optional<CompilationUnit> optionalCompilationUnit = result.getResult();
if (!optionalCompilationUnit.isPresent()) {
return "";
}
CompilationUnit compilationUnit = optionalCompilationUnit.get();
removeComments(compilationUnit);
return LexicalPreservingPrinter.print(compilationUnit);
}
private static void removeComments(CompilationUnit compilationUnit) {
List<Comment> comments = compilationUnit.getAllContainedComments();
List<Comment> unwantedComments = comments
.stream()
.filter(CommentsRemover::isValidCommentType)
.collect(Collectors.toList());
unwantedComments.forEach(Node::remove);
}
/**
* 创建源码解析器。我们设置LexicalPreservationEnabled为true,保留源码中的所有语法。
*
* @return JavaParser
*/
private static JavaParser createJavaParser() {
ParserConfiguration parserConfiguration = new ParserConfiguration();
parserConfiguration.setLexicalPreservationEnabled(true);
return new JavaParser(parserConfiguration);
}
/**
* 我们只识别单行注释和块注释
*
* @param comment
* @return true if meet the correct type
*/
private static boolean isValidCommentType(Comment comment) {
return comment instanceof LineComment || comment instanceof BlockComment;
}
}
在上面的代码中,我们首先创建JavaParser,再解析源码,然后移除单行注释和块注释,最后再用LexicalPreservingPrinter将处理后的源码打印出来,这个打印器可以保留源代码所有词法,比如空格、换行之类的元素。上述代码已有注释,因此不再详述。
考虑到我们平时可能会大量使用该功能,因此将其封装为了IDEA插件,名为remove.comments。下面简要介绍该插件的工作原理及使用方式。
PS:本文不会详细介绍如何编写IDEA插件。
IDEA插件的原理基本都是事件驱动,如下图所示,我们创建了一个事件监听器,当检测到编辑器中点击右键后,即可弹出菜单,我们的插件在菜单中的第一个位置。
接下来,实现事件处理器:
其中包含两段核心代码:
/**
* 移除代码中的注释
*
* @param editor
* @return true if remove comments successfully
*/
private boolean removeComments(Editor editor) {
String src = editor.getDocument().getText();
if (Strings.isNullOrEmpty(src)) {
return false;
}
String dst = CommentsRemover.doAction(checkEndLineAndModifyIfNeed(src));
if (Strings.isNullOrEmpty(dst)) {
return false;
}
editor.getDocument().setText(dst);
return true;
}
/**
* 由于我们保留了源码格式,移除注释之后会引入不必要的空格,因此需要再格式化一下
*
* @param editor
* @param project
*/
private void reformat(Editor editor, Project project) {
PsiDocumentManager.getInstance(project).commitAllDocuments();
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
if (file == null) {
return;
}
LastRunReformatCodeOptionsProvider provider = new LastRunReformatCodeOptionsProvider(PropertiesComponent.getInstance());
ReformatCodeRunOptions currentRunOptions = provider.getLastRunOptions(file);
TextRangeType processingScope = TextRangeType.WHOLE_FILE;
currentRunOptions.setProcessingScope(processingScope);
(new FileInEditorProcessor(file, editor, currentRunOptions)).processCode();
}
然后打包插件:
插件打包好之后,用户就可以从本地磁盘安装了:
在弹出的目录树中,选中remove.comments.zip安装包,确定即可。
重启IDEA后,可以看到插件已安装成功:
此时我们就可以使用该插件,一键删除代码中的注释了。演示一下效果:
上述就是小编为大家分享的如何在IDEA中快速删除Java代码中的注释了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
原网址: 访问
创建于: 2022-05-25 12:34:12
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论