事象
JIG 実行内で全命令走査を伴う計算が経路ごとに再実行され、照合も線形走査のため、大規模プロジェクトで実行時間に直結する。
該当箇所と内容(main a3ad929 時点)
備考
TypesQueryService にキャッシュ機構が既にあるため、MethodRelations / OutboundAdapters をそこに乗せるのが自然。最も費用対効果が高いのは計算の共有と callee インデックス化。
🤖 この issue は Claude Code のコードレビューにより作成されました。
事象
JIG 実行内で全命令走査を伴う計算が経路ごとに再実行され、照合も線形走査のため、大規模プロジェクトで実行時間に直結する。
該当箇所と内容(main a3ad929 時点)
MethodRelations.from(jigTypes)の再計算: inboundAdapters / serviceMethods / datasourceAngles で独立に構築(InboundAdapters.java:20に TODO あり、UsecaseQueryService.java:33、InfrastructureQueryService.java:19-31)。Swagger用語収集のためだけの構築もある(DefaultJigRepositoryFactory.java:143)OutboundAdapters.from(collectTracingJigMethods込み)も serviceAngles / datasourceAngles / outboundAdapters の各経路で再計算MethodRelations.callerMethodsOfが呼び出しごとに全関連を線形走査(MethodRelations.java:44-49)→ callee でグルーピングした Map の導入ServiceMethods.contains()が毎回list()を再構築して線形探索(ServiceMethods.java:39-53)。Usecase.fromから呼ばれ二乗オーダー → ID の Set を事前構築TypeId.isPrimitive()がString.matchesで毎回 Pattern をコンパイル(TypeId.java:83-85)。MethodRelations.fromのフィルタから全 MethodCall に対して呼ばれるホットパス → static Pattern 化 or フィールドキャッシュJigMethodId.tuple()が毎回 regex split で再パースされ、OutboundPortOperation.matchesの全組み合わせ照合で増幅(JigMethodId.java:29-46)DatasourceAngles.fromがポート操作ごとに全永続化操作を線形走査(DatasourceAngles.java:34-49)備考
TypesQueryServiceにキャッシュ機構が既にあるため、MethodRelations / OutboundAdapters をそこに乗せるのが自然。最も費用対効果が高いのは計算の共有と callee インデックス化。🤖 この issue は Claude Code のコードレビューにより作成されました。