2

一部の Java コードをリファクタリングして、一部の静的メソッド呼び出しを非静的呼び出しに変更することで、より分離します。たとえば、次のようになります。

// Before:
DAO.doSomething(dataSource, arg1, ..., argN)

// After:
dao.doSomething(arg1, ..., argN)

私の問題は、大規模なプロジェクトでは、静的メソッド呼び出しが行われている場所を見つけるのが難しい場合があることです。コマンドラインまたはEclipseでこれを行う簡単な方法はありますか?

このようなツールでは、次のような「無害な」静的メソッド呼び出しを無視できるようにする必要があります (最初から見つからないか、検索結果から簡単に削除できるようにすることにより)。

String.valueOf(...)
Integer.parseInt(...)
MyClass.someBenignStaticMethod(...)

いくつかの説明:

  • リフレクションを介して行われたメソッド呼び出しを見つけることに興味はありません
  • このプロジェクトに現在どの静的メソッドが存在するかはわかりません。そのため、Eclipse の「Open Call Hierarchy」コマンド (Ctrl-Alt-H) を使用して呼び出し元を検索するのは簡単ではありません。静的メソッドにより、このアプローチを使用できます
  • プロジェクト外にある静的メソッドの呼び出しを見つけることにも興味があります。たとえば、javax.mail.Transport#send などです。
  • 無料の (ビールのような) ソリューションを探しています
4

6 に答える 6

3

本当に探す必要がありますか?静的メソッド呼び出しを 1 つずつコメントアウトしてみませんか? コンパイルすると、参照がフラッシュされます。

于 2009-10-06T01:48:15.877 に答える
1

優れたASMライブラリを使用する小さなJavaプログラムを作成しました。java.langのようなパッケージを除外し、次のような出力を生成します。

+ java
  + io
    - File
      # createTempFile(java.lang.String, java.lang.String)
+ javax
  + imageio
    - ImageIO
      # read(java.io.InputStream)
      # write(java.awt.image.RenderedImage, java.lang.String, java.io.File)
  + mail
    - Transport
      # send(javax.mail.Message)
    + internet
      - InternetAddress
        # parse(java.lang.String, boolean)
  + xml
    + parsers
      - DocumentBuilderFactory
        # newInstance()

CheckStyleを使用する、既存のビルドプロセスにもっと簡単に組み込まれるものが好きですが、これは私がこれまでに思いついた最良のソリューションです。

于 2009-10-08T03:45:54.570 に答える
1

nWire for Javaという製品があり、これが役立つかもしれません。nWire はコードを分析し、コード コンポーネントと関連付けのデータベースを構築します。当社の Web サイトで簡単なデモを見ることができます。

今後、レポート機能を追加する予定です。それまでの間、データベースの基本的な経験がある場合は、nWire リポジトリを利用して、簡単な SQL クエリを使用して、すべての静的メソッドのリストを取得できます (そこで呼び出しを確認することもできます)。nWire は、オープンソースで無料のH2 データベースエンジンを使用します。

データベースへのアクセスをお手伝いします。[at] nwiresoftware.com をサポートするために私に連絡してください。

于 2009-10-06T07:05:21.513 に答える
1

grep( Linux では) を使用-Rして、最初の caps-dot-camel case-open を検索します (完全なコマンド ラインを提供するほどには使用しません)。そしてgrep -v、ゴミの一部を取り除くために。

ええと、実際に私がしたいことは、段階的にリファクタリングすることです。メソッドを変更し、何が壊れているかを確認します (何も壊れていない場合は、コードを削除します)。

理論的には、クラス ファイルを検索してinvokestatic. ここでは、FindBugs インフラストラクチャがおそらく役立つでしょう (より良い出発点があるかもしれません)。

于 2009-10-06T01:47:04.667 に答える
1

一部の IDE は、リファクタリングをサポートしています。すべての静的メソッドを 1 つずつリファクタリングできます。

Eclipse では、呼び出し階層を表示して、そのようなメソッドのすべての呼び出し元を確認できます。呼び出し階層を表示するには、メソッド名を選択して Command-Alt-H を押すか、シンボルを右クリックして [呼び出し階層を開く] を選択します。

于 2009-10-06T01:49:34.740 に答える