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.infoforループブロックからステートメントを削除したい。これは可能ですか?

私はすでに式を使用しました

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

Notepad++のifステートメントからそれらを削除します。forブロックからリムーバーを削除する方法を探しています

更新:可能であれば、Pythonスクリプトを使用して私を助けてください。

4

2 に答える 2

1

System.out.printlnこれは、ここでの検索で尋ねた他の質問と非常によく似ています。ForLoopsブロックからのみSystem.outステートメントを削除します。

私の答えを参照すると、唯一の違いはPMDクエリが異なることです。これが新しいものです:

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

私の答えの<![CDATA[ ... ]]>要素にある他のクエリを置き換えます。custom.xml他のすべての手順は同じです。

于 2013-01-29T00:21:19.407 に答える
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 に答える