1

我认为这在 Eclipse 中不受支持,但我想找到我声明的每个方法的每个右括号,并在它关闭之前用另外一个代码行替换它。

我试图通过正则表达式“ public.*\}”或“ public[.\s]*\}”来查找,但它没有找到单个方法声明。

尽管有些帖子声明 Eclipse 具有多行搜索和替换功能,但使用正则表达式。我认为并非如此。
当正则表达式知道预期的位置时,通常给出的示例仅识别特定的换行符。

4

3 回答 3

3

这是可能的,但不能使用正则表达式。相反,编写一个小型 Java 程序并添加org.eclipse.jdt.core_3*.jar到类路径中。plugins/您可以在Eclipse 安装文件夹中找到此 JAR 。

JAR 包含 Eclipse 编译器,该编译器具有将 Java 源代码转换为AST的 API 。遍历 AST,对所有方法进行区域设置并使用 AST 节点添加新代码。有一些方法可以将 AST 转换为字符串。使用它来生成新的源代码。

如果您不知道新的 AST 节点应该是什么样子,请将代码添加到单个方法并打印结果。

另一种选择是使用AOP,它允许您在运行时包装方法。

[编辑]查看org.eclipse.jdt.internal.corext.refactoring.surround.SurroundWithTryCatchRefactoring 示例中的代码(grepcode 上的源代码

于 2012-06-06T07:42:24.930 回答
1

由于嵌套的,这是不可能的{}。正则表达式无法处理嵌套。

尝试在every前面插入一个新行}\s*public

于 2012-06-06T07:26:07.827 回答
1

您可以像这样匹配和替换嵌套括号:

搜索模式:({(?:{?(?:\s|.)}?)*?)(})

替换模式:$1\t//我的代码\n$2

但是,这在 Eclipse 中不起作用,而在 Java 中起作用。

于 2012-06-06T08:45:11.420 回答