0

从 for 循环块中删除代码语句...

  for( UIComponent currentMenuItemComponent : menuBarComponent.getChildren() ) {
     String style = "";
     String selectedViewName = ( String )currentMenuItemComponent.getAttributes().get( ATTRIBUTE_View );
     logger.info( "Value of selectedViewName =" + selectedViewName );
     if( selectedViewName.equals( targetView ) ) {
        style = "selected";
        logger.info( "Value of style =" + style );
     }

我想logger.info从 for 循环块中删除语句。这可能吗 ?

我已经用过这个表达

(if|else)(.*)(\r?\n)([\s-]*)(logger.info)(\( \")(.*)(\" \);) 

从 Notepad++ 中的 if 语句中删除它们。我正在寻找一种从for块中移除的方法

更新:如果可能使用 python 脚本,请帮助我。

4

2 回答 2

1

这是你不能用正则表达式做的事情,至少不能用 Notepad++ 的正则表达式引擎。

考虑以下:

for (...)
{
   foo();
   logger.info(baz)
   if (bar())
   {
       logger.info(spam)
   }
   logger.info(ham)
}

您需要递归地跟踪{...}程序当前所在的大括号的嵌套级别,以确定是否有任何logger.info()属于正确的块。而且大多数正则表达式引擎无法处理递归。

即使您使用的是可以(如 .NET),它仍然是一场噩梦。想象一下:

    for (...)
    {
       foo();
       logger.info(baz)
//       if (bar())
//       {
       if (badabing()) {
           logger.info(spam)
       }
       logger.info(ham)
    }

现在 尝试跟踪嵌套...

于 2013-01-21T10:39:08.837 回答
1

这与您在此处找到的另一个问题非常相似System.out.printlnRemove System.out statements from For Loops blocks only

参考我的回答,唯一的区别是 PMD 查询不同。这是新的:

//ForStatement/Statement/descendant-or-self::
       Statement[./StatementExpression/PrimaryExpression/PrimaryPrefix/Name[@Image="logger.info"]]

在我的答案中替换<![CDATA[ ... ]]>元素中的其他查询。custom.xml所有其他步骤都相同。

于 2013-01-29T00:21:19.407 回答