Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Call Hierarchy CopyNew to Visual Studio Code? Get it now.
Call Hierarchy Copy

Call Hierarchy Copy

fftcysstkm

|
1 install
| (0) | Free
呼び出し階層を自動展開してテキストへコピー。Javaのテストコード除外に対応。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Call Hierarchy Copy

VS Codeの呼び出し階層を、ツリーの手動展開なしでテキスト出力する拡張です。Javaの開発向けに、テストコードを除外する設定を標準で有効にしています。

インストール

VS Codeの拡張機能ビュー(Ctrl+Shift+X)で Call Hierarchy Copy を検索し、公開者が fftcysstkm の拡張をインストールしてください。

コマンドラインでもインストールできます。

code --install-extension fftcysstkm.call-hierarchy-copy

Javaで使う場合は Language Support for Java(TM) by Red Hat(redhat.java)も有効にし、プロジェクトの読み込みが完了するまで待ちます。

VSIXからインストールする場合

  1. VS Codeの拡張機能ビューを開きます(Ctrl+Shift+X)。
  2. 右上の … → VSIX からのインストール… を選びます。
  3. このフォルダの call-hierarchy-copy-0.2.0.vsix を選びます(旧バージョンからも同じ手順で更新できます)。
  4. Java用に Language Support for Java(TM) by Red Hat(redhat.java)を有効にし、プロジェクトの読み込みが完了するまで待ちます。

GitHubからクローンした場合は、下記の「開発・検証」の手順で npm install と npm run package を実行するとVSIXを作成できます。VSIXや依存パッケージはGitの管理対象に含めていません。

VSIXはコマンドラインでもインストールできます。

code --install-extension .\call-hierarchy-copy-0.2.0.vsix

以前のローカル版(ID: local-tools.call-hierarchy-copy)をインストールしている場合は、Marketplace版への移行時にローカル版を無効化またはアンインストールしてください。設定名は共通なので、そのまま引き継げます。

VS Code 1.85以上に対応。Java以外でも、呼び出し階層を提供する言語拡張があれば利用できます。

使い方

ソースコード内の対象メソッドの名前にカーソルを置いて右クリックし、呼び出し階層をテキスト出力から操作を選びます。組み込みの「呼び出し階層」ビューを開いたり、クリックして展開したりする必要はありません。

メニュー 出力する内容
呼び出し元をテキストにコピー 対象を呼ぶメソッド → さらにその呼び出し元
呼び出し先をテキストにコピー 対象が呼ぶメソッド → さらにその呼び出し先
呼び出し元をテキストで開く 呼び出し元の結果を新しいテキストエディターに表示
呼び出し先をテキストで開く 呼び出し先の結果を新しいテキストエディターに表示

Ctrl+Shift+P で Call Hierarchy Copy と入力しても実行できます。テキストで開いた結果は Ctrl+S で .txt として保存できます。進行状況の通知からキャンセルすると、クリップボードへの書き込みや結果の表示を行わず終了します。

出力イメージ(名前や詳細の表記は言語拡張により異なります):

呼び出し階層: 呼び出し元(このメソッドを呼ぶ側)
テスト除外: ON(パス・ファイル名で判定)
出力: 3件 / 除外: 1項目

#1 work() — demo.Service (src/main/java/demo/Service.java:4)
└─ #2 run() — demo.EntryPoint (src/main/java/demo/EntryPoint.java:8)
   └─ #3 main(String[]) — demo.EntryPoint (src/main/java/demo/EntryPoint.java:4)

Excel向けのタブ形式

設定画面の Call Hierarchy Copy: Output Format を tabs に変更するか、settings.json に以下を追加してください。

{
  "callHierarchyCopy.outputFormat": "tabs"
}

階層の深さごとにタブを1つ入れます。└─、├─、│、#番号 は付けません。Excelのセルを選んで貼り付けると、起点はA列、子はB列、孫はC列のように配置されます。コピーとテキストプレビューの両方に適用されます。

work()
	run()
		main(String[])

例は階層部分のみです。先頭の集計・注意書きは出力に残ります。メソッド名だけにしたい場合は includeDetails と includeLocation も false にしてください。タブ形式でも [循環参照]、[展開済み]、上限・エラーの注記は残りますが、参照先の項目番号は付けません。

元の罫線付き表示に戻すには outputFormat を tree にします(初期値)。

テスト除外と設定

設定画面で @ext:fftcysstkm.call-hierarchy-copy を検索してください。設定はプロジェクトの .vscode/settings.json にも保存できます。

{
  "callHierarchyCopy.outputFormat": "tree",
  "callHierarchyCopy.excludeTests": true,
  "callHierarchyCopy.maxDepth": 0,
  "callHierarchyCopy.maxNodes": 2000,
  "callHierarchyCopy.deduplicate": true,
  "callHierarchyCopy.includeDetails": true,
  "callHierarchyCopy.includeLocation": true,
  "callHierarchyCopy.requestTimeoutSeconds": 30,
  "callHierarchyCopy.excludePatterns": ["**/generated/**"]
}
設定 初期値 意味
outputFormat "tree" tree: 罫線・番号付き、tabs: 階層ごとのタブのみ
excludeTests true テストの項目とその先の枝を除外
testFilePatterns 下記 テストとみなすglobパターン
excludePatterns [] テスト設定とは独立した追加除外パターン
maxDepth 0 起点を0とする最大深度。0は深さ制限なし
maxNodes 2000 起点・参照を含む最大出力件数(最大50,000)
deduplicate true 同じ項目は初出で展開し、以降は参照表示
includeDetails true クラスなど、言語拡張が返す詳細情報
includeLocation true 定義のファイルパスと1始まりの行番号
requestTimeoutSeconds 30 問い合わせ1回の待機上限(秒)

標準の testFilePatterns は以下です。変更すると配列全体を置き換えるため、追加したい場合は標準分も含めて指定してください。パス区切りは / 推奨で、大文字小文字は区別しません。

{
  "callHierarchyCopy.testFilePatterns": [
    "**/src/test/**",
    "**/src/testFixtures/**",
    "**/src/integrationTest/**",
    "**/src/androidTest/**",
    "**/test/**",
    "**/tests/**",
    "**/*Test.java",
    "**/*Tests.java",
    "**/*TestCase.java",
    "**/Test*.java",
    "**/*IT.java"
  ]
}
  • 判定はパスとファイル名に基づきます。JUnitの @Test やビルドツールの独自テストソース設定を直接解析しません。独自の配置にはパターンを追加してください。
  • 明示的に選んだ起点は、除外条件に一致していても出力します。
  • 除外件数は、取得した枝で見つかった一意の項目数です。除外した項目の配下は探索しないため、その内側は数えません。
  • 複数フォルダのワークスペースでは、フィルターには各フォルダからの相対パスを、表示にはフォルダ名付きのパスを使います。設定は起点のファイルに適用されるものを使います。

大きな階層・取得範囲

  • 循環は [循環参照 → #番号] で停止します。同じ項目の再登場は [展開済み → #番号] と表示します(タブ形式では番号への参照を省略)。枝ごとに展開したい場合は deduplicate を false にしてください。
  • 深さ・件数の上限に達した場合や言語拡張がエラーを返した場合は、未完了と省略箇所を出力します。深さの境界では子を問い合わせないため、葉かどうかにかかわらず「子の取得を省略」と表示します。
  • タイムアウト時には、それ以上の問い合わせを停止し、取得できた範囲を未完了として出力します。エラー詳細は「表示 → 出力 → Call Hierarchy Copy」で確認できます。
  • キャンセル・タイムアウトはこの拡張側の待機を終了します。公開コマンドAPIには実行中の言語サーバー要求を中止する手段がないため、その要求自体は言語拡張側で継続する場合があります。
  • 結果はJava言語拡張の静的解析に依存します。リフレクション、DI、動的呼び出しなど、言語拡張が返さない関係を補完しません。言語拡張が空配列を返した場合も「呼び出しなし」と区別できません。
  • 組み込みの呼び出し階層ビューの現在の選択・表示方向は読み取りません。ソースエディターのカーソル位置と、選んだコマンドを使います。
  • この拡張自身はソースコードを外部へ送信しません。

取得できない場合は、Javaプロジェクトの読み込み完了と、Java拡張のStandardモードを確認してください。メソッド名にカーソルを合わせ、まずVS Code標準の「呼び出し階層の表示」が動作するか確認すると切り分けできます。

開発・検証

Node.js 22以上とnpmを使う例:

npm install
npm run compile
npm test
npm run test:integration
npm run package

pnpm-lock.yaml も同梱しています。固定された依存関係を使う場合は pnpm install --frozen-lockfile と pnpm run ... を使用できます。

F5で拡張開発ホストが起動します。そのウィンドウで samples/java-demo フォルダを開き、Service.java の work にカーソルを置いて出力してください。ServiceTest.testWork が標準で除外され、excludeTests: false で含まれることを確認できます。

test:integration はインストール済みVS Codeを、プロジェクト内の隔離したプロファイルで起動します。必要なら VSCODE_EXECUTABLE にVS Codeの実行ファイル(Windowsなら Code.exe)を指定してください。実際のVS Code公開APIにテスト用プロバイダーを接続し、方向、再帰取得、フィルター、設定反映、プレビューコマンドを検証します。ユーザーのクリップボードにはアクセスしません。これはJava言語サーバー自体の検証とは別です。

Java言語サーバーを含めた検証は、環境変数 JAVA_EXTENSION_PATH にインストール済み redhat.java 拡張のフォルダを指定して npm run test:java を実行します。サンプルを専用フォルダへコピーし、通常コード/テストコードの呼び出し元、再帰取得、呼び出し先、除外設定の切り替えを確認します。

npm run package は型検査・バンドルの後にVSIXを作成します。vsce package を直接使う場合は、先に npm run compile を実行してください。このコマンドではMarketplaceへの公開処理は行いません。公開時はPublisher fftcysstkm の管理画面から生成したVSIXをアップロードします。

利用API

  • VS Code Built-in Commands: vscode.prepareCallHierarchy / vscode.provideIncomingCalls / vscode.provideOutgoingCalls
  • VS Code CallHierarchy API
  • Language Support for Java by Red Hat
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft