本文へスキップ
cd /languages
  • モダンなJVM
  • プログラミング
  • AST・シンボル対応

MaguyvaのKotlin対応: AndroidとJVMのコードグラフ

MaguyvaはAST、シンボル、グラフでKotlinに対応しています。AIエージェントはAndroidとJVMのコード全体で、クラス、拡張関数、コルーチンをたどれます。

Kotlinが浅いAIツールをつまずかせるところ

Kotlinが簡潔なのは、配線を隠しているからです。apply、let、also、run、with は、this と it の意味を変えます。拡張関数は、ほかの場所で定義された型に振る舞いを付け加えます。コルーチンは launch、async、withContext をまたいで処理を移します。ファイルを1つずつ読むエージェントには、呼び出しは見えても、その背後にあるレシーバーは見えません。

Maguyvaはインデックス作成時にその構造をより多く解決するため、エージェントが関数の呼び出し元を尋ねると、本当の答えが返ってきます。

MaguyvaがKotlinで抽出するもの

Maguyvaは .kt と .kts に対応しています。関数、クラス、オブジェクト、コンパニオンオブジェクトが抽出され、関数のシグネチャには拡張レシーバー、パラメーター名、デフォルト値、vararg パラメーターが記録されます。

呼び出しの関係はクラス修飾名を保持するため、OrderRepository.save はほかの save と区別されたままです。レシーバーの型付けは、apply と run の中の this、let と also の中の it、そして with の引数をたどるため、スコープ関数内の呼び出しも正しい型に解決されます。コルーチンビルダーとFlowの演算子(launch、async、withContext、coroutineScope、supervisorScope、flow、emit、delay、Channel)は意図的にグラフに残されます。

グラフには、継承、インターフェース実装、オーバーライド、インスタンス化、アノテーション、型参照、読み取りと書き込み、例外のスローとキャッチのエッジも記録されます。

エージェントへのプロンプト例

  • 「CheckoutUseCase.invoke を呼び出しているのは誰で、どのViewModelからか?」(find_symbol、次に dependency_search の incoming)
  • 「SyncWorker からネットワーククライアントまでの同期フローを追跡して。」(get_task_context)
  • 「PaymentGateway を実装しているクラスはどれか?」(dependency_search)

既知の制限

  • 約250個のKotlin標準ライブラリとプラットフォームの呼び出しは関係性から除外されるため、listOf、map、filter、println のようなヘルパーはグラフのエッジになりません。それらには text_pattern_search を使ってください。

次のステップ

クイックスタートでリポジトリを接続し、互換性ページで対応マトリクスを確認してください。混在するコードベースでは、Javaガイドもご覧ください。

最適な用途

  • > ViewModel、リポジトリ、ユースケースがモジュールをまたいで呼び合う、大規模なマルチモジュールアプリを持つAndroidチーム。
  • > KotlinとJavaの古いコードが混在する、サーバーサイドKotlinやKotlin/JVMのサービス。
  • > エージェントがアプリケーションコードと並べて読む必要がある、Kotlinスクリプト(`.kts`)で書かれたGradleビルド。

エージェントワークフロー

  • > リポジトリやユースケースのクラスのAPIを変更する前に、その呼び出し元をすべて見つける。
  • > ViewModelの `launch` から `withContext` を経てデータ層に至るコルーチンのフローを追跡する。
  • > リファクタリングの前に、インターフェースを実装するクラスや基底メソッドをオーバーライドするクラスをマッピングする。

エンジンの詳細

  • > Kotlinの対応は `.kt` と `.kts` を含みます。シグネチャには拡張レシーバー、パラメーター名、デフォルト値、`vararg` パラメーターが記録されます。
  • > レシーバーの型付けは、`apply` と `run` の中の `this`、`let` と `also` の中の `it`、`with` の引数をたどり、呼び出しはクラス修飾名を保持します。
  • > `launch`、`withContext`、`flow` などのコルーチンビルダーとFlowの演算子はグラフに残り、約250個の標準ライブラリの呼び出しは除外されます。

役立つMCPエントリーポイント

  • find_symbol

    定義と参照が必要なときに、クラス、ユースケース、拡張関数で使ってください。

  • dependency_search

    APIを変更する前に、リポジトリやインターフェースに対してincomingのトラバーサルを使い、呼び出し元と実装クラスを確認してください。

  • get_task_context

    「`SyncWorker` からネットワーククライアントまでの同期フローを追跡して」のようなプロンプトに使ってください。