【问题标题】:Removing whole method by regexp通过正则表达式删除整个方法
【发布时间】:2013-05-22 20:42:54
【问题描述】:

我正在清理我的代码库,我想知道是否可以使用 Eclipse 正则表达式来删除(替换)所有与日志记录相关的内容。

示例代码:

public static void setFoo( Foo param ) {
    singleton.setBar(param);
}

private void log(String msg) {
    Logger.log( msg );
}

private void setBar( Foo param ) {
    log( "Foo: " 
        + param.toString() );
    log( "bar" );
    this.mParam = param;
}

每个类都有自己的私有log(String msg) 方法,需要删除该方法以及对这些方法的所有引用。我在网上查看了提示和提示,并尝试了几个没有成功的例子......

更新:

搜索单行 log() -references 适用于^.*{1}\Wlog{1}\W.*\;\R

{1}\W 周围的log 用于拒绝Dialoglogo 等匹配项。

如何添加多行支持?表达式中的(?s) 将匹配log 之前文件中的所有文本-match...

谁能帮帮我?

【问题讨论】:

  • 使用正则表达式解析语法总是复杂的、有风险的,并且不能保证失败(正则表达式不能匹配语法所包含的所有内容)。尝试使用 java 解析器。
  • 是的,你完全正确。但这是一个简单的任务,如果我可以删除几乎所有行,手工将处于合理水平......但我也会检查 java 解析器。

标签: java regex eclipse


【解决方案1】:

您可以从删除所有用于记录的导入语句开始。然后,日志行将清楚地显示为编译时错误。

【讨论】:

  • 这与正则表达式有何关系?
【解决方案2】:

我认为这不能通过跨代码库的一次查找/替换或重构操作来完成。最简单的方法是按类进行:

  1. 删除日志方法的内容
  2. 选择方法
  3. 选择重构 > 内联...

【讨论】:

  • 我认为这并非不可能,但如果有人可以帮助我构建两个(或更多)分离的正则表达式以通过两次搜索/替换运行来清理我的代码,我会很高兴...... 1。删除所有 log() -方法。 2. 删除所有(多行)引用。
  • 目前无法获得绝对指标,但项目包含一百多个类。其中大约 80% 的人有日志记录。
【解决方案3】:

睡了一夜,终于找到解决办法了……

  1. 所有log(String msg){}方法都可以通过表达式移除 (?s)^(\s|\w)*void\s{1}log{1}\W(.|^})*?[}](\s)*\R。适用于问题中定义的方法定义。

  2. 可以通过(?s)^\s*log{1}\W(.|^;)*?[;](\s)*\R 删除所有引用。也匹配多行方法调用。

如果您发现一些违规行为,请随时修正语法,但这些表达式似乎对我的需要非常强大。

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多