クラス有効範囲プローブでのフラグメントの例

この例では、プローブ内のクラス有効範囲でのフラグメントの使用法を示します。

この例のプローブは、com.sample* のワイルドカード・パターンと一致するパッケージ内のすべてのクラスからこれまでに作成されたインスタンスの数を数えて、インスタンスが 100 個作成されるごとに報告します。

クラス・スコープでのフラグメントは、entry フラグメントをコンパイルして挿入したクラス内で、int 型の静的フィールドとして現れるカウンターを宣言します。このフラグメントは、プローブがロードされていることを報告する fragment クラスのための静的イニシャライザーも宣言します。クラス有効範囲でのフラグメント内の項目は、プローブが適用されるクラスではなく、生成されたプローブ・クラス内に作成されることに注意してください。 プローブが適用されるクラス内に static フィールドまたは静的イニシャライザー・ロジックを挿入するには、staticInitializer 型のプローブ・フラグメントを使用するか、または static フィールドを定義してください。

このプローブは、Probekit エディター内の以下のエントリーによって定義されています。
  • クラス有効範囲でのフラグメントの Java コード (この値を入力するには、ツリー・ペインの「プローブ (Probe)」を選択します):

    static public int entry_counter = 0;
    static int counter = 0;
    static { System.out.println("[fragmentAtClassScope sample probe has loaded.]"); }

  • ターゲット (これらの値を入力するには、ツリー・ペインの「ターゲット」を選択して、 次に「編集」をクリックします):
    • ターゲット型: include
    • パッケージ: com.sample* (ここでは実際のパッケージ名を使用します。)
    • クラス: *
    • メソッド: <init>
    • シグニチャー: *
  • ターゲット (これらの値を入力するには、「追加」をクリックし、次に編集ペインの「編集」をクリックします):
    • ターゲット型: exclude
    • パッケージ: *
    • クラス: *
    • メソッド: *
    • シグニチャー: *
  • フラグメント (これらの値を入力するには、 ツリー・ペインの「フラグメント (Fragment)」を選択します)。
    • フラグメント型: エントリー
    • Java コード:

      ++counter;
      if (counter % 100 == 0)
        System.out.println("[" + counter + " instances of classes in com.sample package so far]");