@nithin554/code-crawler 0.1.36 → 0.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -13
- package/dist/crawler.d.ts +8 -0
- package/dist/crawler.js +133 -14
- package/dist/crawler.js.map +1 -1
- package/dist/graph/queries.d.ts +136 -6
- package/dist/graph/queries.js +386 -40
- package/dist/graph/queries.js.map +1 -1
- package/dist/graph/schema.d.ts +26 -3
- package/dist/graph/schema.js +24 -0
- package/dist/graph/schema.js.map +1 -1
- package/dist/graph/store.d.ts +6 -0
- package/dist/graph/store.js +15 -0
- package/dist/graph/store.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/dist/parser/language.d.ts +32 -1
- package/dist/parser/languages/java.js +95 -7
- package/dist/parser/languages/java.js.map +1 -1
- package/dist/resolver/dynamic.d.ts +73 -0
- package/dist/resolver/dynamic.js +473 -0
- package/dist/resolver/dynamic.js.map +1 -0
- package/dist/resolver/types.d.ts +14 -0
- package/dist/resolver/types.js +57 -0
- package/dist/resolver/types.js.map +1 -1
- package/dist/server.js +227 -11
- package/dist/server.js.map +1 -1
- package/package.json +3 -3
package/dist/graph/queries.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { annotationNodeId } from "./schema.js";
|
|
1
2
|
function nodeToRef(node) {
|
|
2
3
|
return {
|
|
3
4
|
id: node.id,
|
|
@@ -11,6 +12,18 @@ function nodeToRef(node) {
|
|
|
11
12
|
function resolveNode(store, symbol) {
|
|
12
13
|
return store.getNode(symbol) ?? store.getNodeByQualifiedName(symbol);
|
|
13
14
|
}
|
|
15
|
+
/** Edge kinds a traversal should follow, ordered from most to least certain. */
|
|
16
|
+
export function traversalEdgeKinds(opts = {}) {
|
|
17
|
+
const kinds = ["CALLS"];
|
|
18
|
+
if (opts.includeDynamic)
|
|
19
|
+
kinds.push("DYNAMIC_DISPATCH");
|
|
20
|
+
if (opts.includeAdvice)
|
|
21
|
+
kinds.push("ADVISES");
|
|
22
|
+
return kinds;
|
|
23
|
+
}
|
|
24
|
+
function sqlKinds(kinds) {
|
|
25
|
+
return kinds.map((k) => `'${k}'`).join(",");
|
|
26
|
+
}
|
|
14
27
|
/**
|
|
15
28
|
* Find every symbol that calls the given symbol, directly or transitively.
|
|
16
29
|
* Each row includes the edge chain depth so clients can render a call tree.
|
|
@@ -22,42 +35,51 @@ export function getCallers(store, symbol, opts = {}) {
|
|
|
22
35
|
const transitive = opts.transitive ?? true;
|
|
23
36
|
const maxDepth = Math.max(1, opts.maxDepth ?? store.maxDepth ?? 10);
|
|
24
37
|
const limit = opts.limit ?? 100;
|
|
38
|
+
const kinds = traversalEdgeKinds(opts);
|
|
25
39
|
if (!transitive) {
|
|
26
|
-
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
40
|
+
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
41
|
+
e.properties AS edge_props, e.kind AS edge_kind
|
|
27
42
|
FROM edges e
|
|
28
43
|
JOIN nodes n ON n.id = e.source
|
|
29
|
-
WHERE e.target = ? AND e.kind
|
|
30
|
-
ORDER BY e.source
|
|
31
|
-
LIMIT ?`,
|
|
44
|
+
WHERE e.target = ? AND e.kind IN (${sqlKinds(kinds)})
|
|
45
|
+
ORDER BY e.kind, e.source
|
|
46
|
+
LIMIT ?`, target.id, limit);
|
|
32
47
|
return {
|
|
33
48
|
target: nodeToRef(target),
|
|
34
49
|
callers: rows.map((r) => ({
|
|
35
50
|
caller: rowToRef(r),
|
|
36
51
|
depth: 1,
|
|
37
52
|
callSiteLine: edgeLine(r.edge_props),
|
|
53
|
+
edgeKind: r.edge_kind,
|
|
38
54
|
})),
|
|
39
55
|
};
|
|
40
56
|
}
|
|
41
|
-
const rows = store.raw(`WITH RECURSIVE callers(id, depth, path) AS (
|
|
42
|
-
SELECT e.source, 1, e.source || '/' || e.target
|
|
57
|
+
const rows = store.raw(`WITH RECURSIVE callers(id, depth, path, edge_kind, edge_props) AS (
|
|
58
|
+
SELECT e.source, 1, e.source || '/' || e.target, e.kind, e.properties
|
|
43
59
|
FROM edges e
|
|
44
|
-
WHERE e.target = ? AND e.kind
|
|
60
|
+
WHERE e.target = ? AND e.kind IN (${sqlKinds(kinds)})
|
|
45
61
|
UNION ALL
|
|
46
|
-
SELECT e.source, c.depth + 1, c.path || '/' || e.source
|
|
62
|
+
SELECT e.source, c.depth + 1, c.path || '/' || e.source, e.kind, e.properties
|
|
47
63
|
FROM edges e
|
|
48
64
|
JOIN callers c ON e.target = c.id
|
|
49
|
-
WHERE e.kind
|
|
65
|
+
WHERE e.kind IN (${sqlKinds(kinds)})
|
|
50
66
|
AND c.depth < ?
|
|
51
|
-
AND
|
|
67
|
+
AND instr('|' || c.path || '|', '|' || e.source || '|') = 0
|
|
52
68
|
)
|
|
53
|
-
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
69
|
+
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
70
|
+
c.depth, c.edge_kind, c.edge_props
|
|
54
71
|
FROM callers c
|
|
55
72
|
JOIN nodes n ON n.id = c.id
|
|
56
73
|
ORDER BY c.depth, n.id
|
|
57
|
-
LIMIT ?`,
|
|
74
|
+
LIMIT ?`, target.id, maxDepth, limit);
|
|
58
75
|
return {
|
|
59
76
|
target: nodeToRef(target),
|
|
60
|
-
callers: rows.map((r) => ({
|
|
77
|
+
callers: rows.map((r) => ({
|
|
78
|
+
caller: rowToRef(r),
|
|
79
|
+
depth: r.depth,
|
|
80
|
+
callSiteLine: edgeLine(r.edge_props),
|
|
81
|
+
edgeKind: r.edge_kind,
|
|
82
|
+
})),
|
|
61
83
|
};
|
|
62
84
|
}
|
|
63
85
|
/**
|
|
@@ -70,47 +92,56 @@ export function getCallees(store, symbol, opts = {}) {
|
|
|
70
92
|
const transitive = opts.transitive ?? true;
|
|
71
93
|
const maxDepth = Math.max(1, opts.maxDepth ?? store.maxDepth ?? 10);
|
|
72
94
|
const limit = opts.limit ?? 100;
|
|
95
|
+
const kinds = traversalEdgeKinds(opts);
|
|
73
96
|
if (!transitive) {
|
|
74
|
-
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
97
|
+
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
98
|
+
e.properties AS edge_props, e.kind AS edge_kind
|
|
75
99
|
FROM edges e
|
|
76
100
|
JOIN nodes n ON n.id = e.target
|
|
77
|
-
WHERE e.source = ? AND e.kind
|
|
78
|
-
ORDER BY e.target
|
|
79
|
-
LIMIT ?`,
|
|
101
|
+
WHERE e.source = ? AND e.kind IN (${sqlKinds(kinds)})
|
|
102
|
+
ORDER BY e.kind, e.target
|
|
103
|
+
LIMIT ?`, source.id, limit);
|
|
80
104
|
return {
|
|
81
105
|
source: nodeToRef(source),
|
|
82
106
|
callees: rows.map((r) => ({
|
|
83
107
|
callee: rowToRef(r),
|
|
84
108
|
depth: 1,
|
|
85
109
|
callSiteLine: edgeLine(r.edge_props),
|
|
110
|
+
edgeKind: r.edge_kind,
|
|
86
111
|
})),
|
|
87
112
|
};
|
|
88
113
|
}
|
|
89
|
-
const rows = store.raw(`WITH RECURSIVE callees(id, depth, path) AS (
|
|
90
|
-
SELECT e.target, 1, e.source || '/' || e.target
|
|
114
|
+
const rows = store.raw(`WITH RECURSIVE callees(id, depth, path, edge_kind, edge_props) AS (
|
|
115
|
+
SELECT e.target, 1, e.source || '/' || e.target, e.kind, e.properties
|
|
91
116
|
FROM edges e
|
|
92
|
-
WHERE e.source = ? AND e.kind
|
|
117
|
+
WHERE e.source = ? AND e.kind IN (${sqlKinds(kinds)})
|
|
93
118
|
UNION ALL
|
|
94
|
-
SELECT e.target, c.depth + 1, c.path || '/' || e.target
|
|
119
|
+
SELECT e.target, c.depth + 1, c.path || '/' || e.target, e.kind, e.properties
|
|
95
120
|
FROM edges e
|
|
96
121
|
JOIN callees c ON e.source = c.id
|
|
97
|
-
WHERE e.kind
|
|
122
|
+
WHERE e.kind IN (${sqlKinds(kinds)})
|
|
98
123
|
AND c.depth < ?
|
|
99
|
-
AND
|
|
124
|
+
AND instr('|' || c.path || '|', '|' || e.target || '|') = 0
|
|
100
125
|
)
|
|
101
|
-
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
126
|
+
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
127
|
+
c.depth, c.edge_kind, c.edge_props
|
|
102
128
|
FROM callees c
|
|
103
129
|
JOIN nodes n ON n.id = c.id
|
|
104
130
|
ORDER BY c.depth, n.id
|
|
105
|
-
LIMIT ?`,
|
|
131
|
+
LIMIT ?`, source.id, maxDepth, limit);
|
|
106
132
|
return {
|
|
107
133
|
source: nodeToRef(source),
|
|
108
|
-
callees: rows.map((r) => ({
|
|
134
|
+
callees: rows.map((r) => ({
|
|
135
|
+
callee: rowToRef(r),
|
|
136
|
+
depth: r.depth,
|
|
137
|
+
callSiteLine: edgeLine(r.edge_props),
|
|
138
|
+
edgeKind: r.edge_kind,
|
|
139
|
+
})),
|
|
109
140
|
};
|
|
110
141
|
}
|
|
111
142
|
/**
|
|
112
|
-
* Find up to `limit`
|
|
113
|
-
* BFS over
|
|
143
|
+
* Find up to `limit` call paths between two symbols.
|
|
144
|
+
* BFS over the selected edge kinds so the shortest paths come first.
|
|
114
145
|
*/
|
|
115
146
|
export function tracePath(store, from, to, opts = {}) {
|
|
116
147
|
const start = resolveNode(store, from);
|
|
@@ -119,16 +150,19 @@ export function tracePath(store, from, to, opts = {}) {
|
|
|
119
150
|
return null;
|
|
120
151
|
const maxDepth = Math.max(1, opts.maxDepth ?? store.maxDepth ?? 10);
|
|
121
152
|
const limit = opts.limit ?? 10;
|
|
153
|
+
const kinds = sqlKinds(traversalEdgeKinds(opts));
|
|
122
154
|
// BFS in SQL via recursive CTE that accumulates the path taken.
|
|
123
155
|
const rows = store.raw(`WITH RECURSIVE paths(id, depth, path, edge_path) AS (
|
|
124
|
-
SELECT e.target, 1, e.source || '/' || e.target,
|
|
156
|
+
SELECT e.target, 1, e.source || '/' || e.target,
|
|
157
|
+
e.source || '>' || e.target || '>' || e.kind
|
|
125
158
|
FROM edges e
|
|
126
|
-
WHERE e.source = ? AND e.kind
|
|
159
|
+
WHERE e.source = ? AND e.kind IN (${kinds})
|
|
127
160
|
UNION ALL
|
|
128
|
-
SELECT e.target, p.depth + 1, p.path || '/' || e.target,
|
|
161
|
+
SELECT e.target, p.depth + 1, p.path || '/' || e.target,
|
|
162
|
+
p.edge_path || '|' || e.source || '>' || e.target || '>' || e.kind
|
|
129
163
|
FROM edges e
|
|
130
164
|
JOIN paths p ON e.source = p.id
|
|
131
|
-
WHERE e.kind
|
|
165
|
+
WHERE e.kind IN (${kinds})
|
|
132
166
|
AND p.depth < ?
|
|
133
167
|
AND instr('|' || p.path || '|', '|' || e.target || '|') = 0
|
|
134
168
|
)
|
|
@@ -136,16 +170,94 @@ export function tracePath(store, from, to, opts = {}) {
|
|
|
136
170
|
FROM paths
|
|
137
171
|
WHERE id = ?
|
|
138
172
|
ORDER BY depth
|
|
139
|
-
LIMIT ?`,
|
|
173
|
+
LIMIT ?`, start.id, maxDepth, goal.id, limit);
|
|
140
174
|
return rows.map((r) => {
|
|
141
175
|
const ids = r.path.split("/");
|
|
142
|
-
const edges = r.edge_path.split("|").map((
|
|
143
|
-
const [src, tgt] =
|
|
144
|
-
|
|
176
|
+
const edges = r.edge_path.split("|").map((triple) => {
|
|
177
|
+
const [src, tgt, kind, ...rest] = triple.split(">");
|
|
178
|
+
// Method ids may contain '>'? No, node ids use type#method and $field.
|
|
179
|
+
void rest;
|
|
180
|
+
const edge = {
|
|
181
|
+
source: src ?? "",
|
|
182
|
+
target: tgt ?? "",
|
|
183
|
+
kind: kind ?? undefined,
|
|
184
|
+
callSiteLine: undefined,
|
|
185
|
+
resolved: undefined,
|
|
186
|
+
};
|
|
187
|
+
const props = store.raw("SELECT properties FROM edges WHERE source = ? AND target = ? AND kind = ? LIMIT 1", edge.source, edge.target, edge.kind);
|
|
188
|
+
const parsed = props[0]
|
|
189
|
+
? JSON.parse(props[0].properties)
|
|
190
|
+
: undefined;
|
|
191
|
+
edge.callSiteLine = parsed?.line;
|
|
192
|
+
edge.resolved = parsed?.resolved;
|
|
193
|
+
return edge;
|
|
145
194
|
});
|
|
146
195
|
return { path: ids, length: r.depth, edges };
|
|
147
196
|
});
|
|
148
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Dynamic execution trace: follows static + virtual dispatch edges and weaves
|
|
200
|
+
* in aspect advice. When a call reaches an advised method, the advice method
|
|
201
|
+
* is visited first (an `INTERCEPT` edge), then the method itself.
|
|
202
|
+
*/
|
|
203
|
+
export function traceExecution(store, symbol, opts = {}) {
|
|
204
|
+
const root = resolveNode(store, symbol);
|
|
205
|
+
if (!root)
|
|
206
|
+
return null;
|
|
207
|
+
const includeDynamic = opts.includeDynamic ?? true;
|
|
208
|
+
const includeAdvice = opts.includeAdvice ?? true;
|
|
209
|
+
const maxDepth = Math.max(1, opts.maxDepth ?? store.maxDepth ?? 10);
|
|
210
|
+
const limit = opts.limit ?? 200;
|
|
211
|
+
const baseKinds = ["CALLS"];
|
|
212
|
+
if (includeDynamic)
|
|
213
|
+
baseKinds.push("DYNAMIC_DISPATCH");
|
|
214
|
+
const base = sqlKinds(baseKinds);
|
|
215
|
+
// Advice intercepts an advised method, so the woven hop runs
|
|
216
|
+
// advised-method -> advice-method. ADVISES itself is a relation, not a call,
|
|
217
|
+
// and must not be traversed as an ordinary edge.
|
|
218
|
+
const interceptJoin = includeAdvice
|
|
219
|
+
? `UNION ALL
|
|
220
|
+
SELECT a.target, a.source, 'INTERCEPT', a.properties, 0
|
|
221
|
+
FROM edges a
|
|
222
|
+
WHERE a.kind = 'ADVISES'`
|
|
223
|
+
: "";
|
|
224
|
+
const rows = store.raw(`WITH RECURSIVE flow(source, target, kind, properties, advice_hop) AS (
|
|
225
|
+
SELECT source, target, kind, properties, 0 FROM edges WHERE kind IN (${base})
|
|
226
|
+
${interceptJoin}
|
|
227
|
+
),
|
|
228
|
+
walk(id, depth, path, parent, via, properties) AS (
|
|
229
|
+
SELECT ?, 0, ?, NULL, NULL, NULL
|
|
230
|
+
UNION ALL
|
|
231
|
+
SELECT f.target, w.depth + 1, w.path || '/' || f.target, w.id, f.kind, f.properties
|
|
232
|
+
FROM flow f
|
|
233
|
+
JOIN walk w ON f.source = w.id
|
|
234
|
+
WHERE w.depth < ?
|
|
235
|
+
AND instr('|' || w.path || '|', '|' || f.target || '|') = 0
|
|
236
|
+
)
|
|
237
|
+
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
238
|
+
w.depth, w.via, w.properties AS step_props
|
|
239
|
+
FROM walk w
|
|
240
|
+
JOIN nodes n ON n.id = w.id
|
|
241
|
+
WHERE w.depth > 0
|
|
242
|
+
ORDER BY w.depth, n.id
|
|
243
|
+
LIMIT ?`, root.id, root.id, maxDepth, limit);
|
|
244
|
+
// Multiple runtime paths can reach the same symbol; report it once at the
|
|
245
|
+
// shallowest depth so the trace reads as execution order, not all paths.
|
|
246
|
+
const seen = new Set();
|
|
247
|
+
const steps = [];
|
|
248
|
+
for (const r of rows) {
|
|
249
|
+
if (seen.has(r.id))
|
|
250
|
+
continue;
|
|
251
|
+
seen.add(r.id);
|
|
252
|
+
steps.push({
|
|
253
|
+
symbol: rowToRef(r),
|
|
254
|
+
depth: r.depth,
|
|
255
|
+
via: r.via ?? undefined,
|
|
256
|
+
callSiteLine: edgeLine(r.step_props ?? undefined),
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
return { root: nodeToRef(root), steps };
|
|
260
|
+
}
|
|
149
261
|
/**
|
|
150
262
|
* Extract the neighborhood around a symbol (any edge kinds), useful for
|
|
151
263
|
* visualization and for letting an LLM see the local shape of the graph.
|
|
@@ -155,7 +267,19 @@ export function getSubgraph(store, symbol, opts = {}) {
|
|
|
155
267
|
if (!center)
|
|
156
268
|
return { center: null, nodes: [], edges: [] };
|
|
157
269
|
const radius = Math.max(1, opts.radius ?? 2);
|
|
158
|
-
const edgeKinds = opts.edgeKinds ??
|
|
270
|
+
const edgeKinds = opts.edgeKinds ??
|
|
271
|
+
[
|
|
272
|
+
"CALLS",
|
|
273
|
+
"DYNAMIC_DISPATCH",
|
|
274
|
+
"ADVISES",
|
|
275
|
+
"DECLARED_IN",
|
|
276
|
+
"CONTAINS",
|
|
277
|
+
"EXTENDS",
|
|
278
|
+
"IMPLEMENTS",
|
|
279
|
+
"ANNOTATED_WITH",
|
|
280
|
+
"REFERENCES",
|
|
281
|
+
"IMPORTS",
|
|
282
|
+
];
|
|
159
283
|
const limit = opts.limit ?? 500;
|
|
160
284
|
const kinds = edgeKinds.map((k) => `'${k}'`).join(",");
|
|
161
285
|
const rows = store.raw(`WITH RECURSIVE reach(id, depth) AS (
|
|
@@ -175,7 +299,7 @@ export function getSubgraph(store, symbol, opts = {}) {
|
|
|
175
299
|
FROM reach r
|
|
176
300
|
JOIN nodes n ON n.id = r.id
|
|
177
301
|
ORDER BY r.depth, n.id
|
|
178
|
-
LIMIT ?`,
|
|
302
|
+
LIMIT ?`, center.id, radius, radius, limit);
|
|
179
303
|
const nodes = rows.map(rowToRef);
|
|
180
304
|
const ids = nodes.map((n) => n.id);
|
|
181
305
|
if (ids.length === 0)
|
|
@@ -223,10 +347,11 @@ export function searchSymbols(store, query, opts = {}) {
|
|
|
223
347
|
ELSE 2 END,
|
|
224
348
|
n.qualified_name
|
|
225
349
|
LIMIT ?`, ...params);
|
|
226
|
-
// Re-rank: exact
|
|
350
|
+
// Re-rank: exact name matches first, then keep alphabetical ordering so the
|
|
351
|
+
// SQL ordering is not silently discarded.
|
|
227
352
|
return rows
|
|
228
353
|
.map((r) => rowToRef(r))
|
|
229
|
-
.sort((a, b) => rank(a, q) - rank(b, q));
|
|
354
|
+
.sort((a, b) => rank(a, q) - rank(b, q) || a.qualifiedName.localeCompare(b.qualifiedName));
|
|
230
355
|
}
|
|
231
356
|
function rank(ref, q) {
|
|
232
357
|
if (ref.qualifiedName.toLowerCase() === q)
|
|
@@ -247,6 +372,227 @@ export function suggestSymbols(store, symbol, limit = 8) {
|
|
|
247
372
|
const best = tokens[0] ?? symbol.slice(-20);
|
|
248
373
|
return searchSymbols(store, best, { limit });
|
|
249
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* Find every type that implements/extends a given interface or superclass,
|
|
377
|
+
* directly or transitively.
|
|
378
|
+
*/
|
|
379
|
+
export function findImplementations(store, symbol, opts = {}) {
|
|
380
|
+
const target = resolveNode(store, symbol);
|
|
381
|
+
if (!target)
|
|
382
|
+
return null;
|
|
383
|
+
const maxDepth = Math.max(1, opts.maxDepth ?? store.maxDepth ?? 10);
|
|
384
|
+
const limit = opts.limit ?? 100;
|
|
385
|
+
const rows = store.raw(`WITH RECURSIVE impl(id, depth, path, via) AS (
|
|
386
|
+
SELECT e.source, 1, e.source || '/' || e.target, e.kind
|
|
387
|
+
FROM edges e
|
|
388
|
+
WHERE e.target = ? AND e.kind IN ('EXTENDS', 'IMPLEMENTS')
|
|
389
|
+
UNION ALL
|
|
390
|
+
SELECT e.source, i.depth + 1, i.path || '/' || e.source, e.kind
|
|
391
|
+
FROM edges e
|
|
392
|
+
JOIN impl i ON e.target = i.id
|
|
393
|
+
WHERE e.kind IN ('EXTENDS', 'IMPLEMENTS')
|
|
394
|
+
AND i.depth < ?
|
|
395
|
+
AND instr('|' || i.path || '|', '|' || e.source || '|') = 0
|
|
396
|
+
)
|
|
397
|
+
SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
398
|
+
i.depth, i.via
|
|
399
|
+
FROM impl i
|
|
400
|
+
JOIN nodes n ON n.id = i.id
|
|
401
|
+
WHERE n.kind IN ('class', 'interface', 'enum', 'aspect', 'annotation_type')
|
|
402
|
+
ORDER BY i.depth, n.qualified_name
|
|
403
|
+
LIMIT ?`, target.id, maxDepth, limit);
|
|
404
|
+
return {
|
|
405
|
+
target: nodeToRef(target),
|
|
406
|
+
implementations: rows.map((r) => ({
|
|
407
|
+
type: rowToRef(r),
|
|
408
|
+
depth: r.depth,
|
|
409
|
+
via: r.via,
|
|
410
|
+
})),
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
/** List aspects, their advice methods, and the methods each advice intercepts. */
|
|
414
|
+
export function getAspects(store, opts = {}) {
|
|
415
|
+
const limit = opts.limit ?? store.defaultLimit ?? 50;
|
|
416
|
+
const aspectRows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties
|
|
417
|
+
FROM nodes n
|
|
418
|
+
WHERE n.kind = 'aspect'
|
|
419
|
+
ORDER BY n.qualified_name
|
|
420
|
+
LIMIT ?`, limit);
|
|
421
|
+
return aspectRows.map((row) => {
|
|
422
|
+
const aspect = rowToRef(row);
|
|
423
|
+
const members = store.raw(`SELECT m.id, m.qualified_name, m.kind, m.file_path, m.properties
|
|
424
|
+
FROM edges e
|
|
425
|
+
JOIN nodes m ON m.id = e.target
|
|
426
|
+
WHERE e.source = ? AND e.kind = 'CONTAINS'
|
|
427
|
+
AND m.kind = 'method'
|
|
428
|
+
ORDER BY m.qualified_name`, aspect.id);
|
|
429
|
+
const advice = [];
|
|
430
|
+
for (const member of members) {
|
|
431
|
+
const props = JSON.parse(member.properties);
|
|
432
|
+
const advisedRows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties
|
|
433
|
+
FROM edges e
|
|
434
|
+
JOIN nodes n ON n.id = e.target
|
|
435
|
+
WHERE e.source = ? AND e.kind = 'ADVISES'
|
|
436
|
+
ORDER BY n.qualified_name`, member.id);
|
|
437
|
+
if (!props.adviceKind && advisedRows.length === 0)
|
|
438
|
+
continue;
|
|
439
|
+
advice.push({
|
|
440
|
+
method: rowToRef(member),
|
|
441
|
+
adviceKind: props.adviceKind,
|
|
442
|
+
pointcut: props.pointcut,
|
|
443
|
+
advised: advisedRows.map(rowToRef),
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
return { aspect, advice };
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
function decoratorsFor(store, ids) {
|
|
450
|
+
if (ids.length === 0)
|
|
451
|
+
return [];
|
|
452
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
453
|
+
const rows = store.raw(`SELECT a.qualified_name, a.properties AS ann_props, e.properties AS edge_props
|
|
454
|
+
FROM edges e
|
|
455
|
+
JOIN nodes a ON a.id = e.target
|
|
456
|
+
WHERE e.kind = 'ANNOTATED_WITH' AND e.source IN (${placeholders})
|
|
457
|
+
ORDER BY a.qualified_name`, ...ids);
|
|
458
|
+
return rows.map((r) => {
|
|
459
|
+
const ann = JSON.parse(r.ann_props);
|
|
460
|
+
const edge = JSON.parse(r.edge_props);
|
|
461
|
+
return {
|
|
462
|
+
name: ann.name ?? r.qualified_name,
|
|
463
|
+
fqn: ann.fqn,
|
|
464
|
+
decorator: ann.decorator ?? false,
|
|
465
|
+
line: edge.line,
|
|
466
|
+
arguments: edge.arguments ?? [],
|
|
467
|
+
};
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Decorators/annotations applied to a symbol, optionally including the
|
|
472
|
+
* annotations on its declared members (methods, constructors, fields).
|
|
473
|
+
*/
|
|
474
|
+
export function getDecorators(store, symbol, opts = {}) {
|
|
475
|
+
const node = resolveNode(store, symbol);
|
|
476
|
+
if (!node)
|
|
477
|
+
return null;
|
|
478
|
+
const decorators = decoratorsFor(store, [node.id]);
|
|
479
|
+
if (!opts.includeMembers)
|
|
480
|
+
return { symbol: nodeToRef(node), decorators, members: [] };
|
|
481
|
+
const memberRows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties
|
|
482
|
+
FROM edges e
|
|
483
|
+
JOIN nodes n ON n.id = e.target
|
|
484
|
+
WHERE e.source = ? AND e.kind = 'CONTAINS'
|
|
485
|
+
AND n.kind IN ('method', 'constructor', 'field')
|
|
486
|
+
ORDER BY n.qualified_name`, node.id);
|
|
487
|
+
return {
|
|
488
|
+
symbol: nodeToRef(node),
|
|
489
|
+
decorators,
|
|
490
|
+
members: memberRows
|
|
491
|
+
.map((row) => {
|
|
492
|
+
const ref = rowToRef(row);
|
|
493
|
+
return { symbol: ref, decorators: decoratorsFor(store, [ref.id]) };
|
|
494
|
+
})
|
|
495
|
+
.filter((m) => m.decorators.length > 0),
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Find every symbol annotated/decorated with the given annotation. Accepts a
|
|
500
|
+
* simple name (`Transactional`), a node id (`@Transactional`) or an FQN.
|
|
501
|
+
*/
|
|
502
|
+
export function findAnnotated(store, annotation, opts = {}) {
|
|
503
|
+
const trimmed = annotation.trim();
|
|
504
|
+
if (!trimmed)
|
|
505
|
+
return [];
|
|
506
|
+
const name = trimmed.startsWith("@") ? trimmed.slice(1) : trimmed;
|
|
507
|
+
const limit = opts.limit ?? store.defaultLimit ?? 50;
|
|
508
|
+
const kindClause = opts.kind ? "AND n.kind = ?" : "";
|
|
509
|
+
const params = [
|
|
510
|
+
annotationNodeId(name),
|
|
511
|
+
name,
|
|
512
|
+
`%.${name}`,
|
|
513
|
+
`%"name":"${name}"%`,
|
|
514
|
+
];
|
|
515
|
+
if (opts.kind)
|
|
516
|
+
params.push(opts.kind);
|
|
517
|
+
params.push(limit);
|
|
518
|
+
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
519
|
+
a.properties AS ann_props, e.properties AS edge_props
|
|
520
|
+
FROM edges e
|
|
521
|
+
JOIN nodes n ON n.id = e.source
|
|
522
|
+
JOIN nodes a ON a.id = e.target
|
|
523
|
+
WHERE e.kind = 'ANNOTATED_WITH'
|
|
524
|
+
AND (a.id = ? OR a.qualified_name = ? OR a.qualified_name LIKE ? OR LOWER(a.properties) LIKE LOWER(?))
|
|
525
|
+
${kindClause}
|
|
526
|
+
ORDER BY n.qualified_name
|
|
527
|
+
LIMIT ?`, ...params);
|
|
528
|
+
return rows.map((r) => {
|
|
529
|
+
const ann = JSON.parse(r.ann_props);
|
|
530
|
+
const edge = JSON.parse(r.edge_props);
|
|
531
|
+
return {
|
|
532
|
+
symbol: rowToRef(r),
|
|
533
|
+
annotation: { name: ann.name ?? name, fqn: ann.fqn },
|
|
534
|
+
line: edge.line,
|
|
535
|
+
arguments: edge.arguments ?? [],
|
|
536
|
+
};
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
/** Rank callable symbols by incoming/outgoing call volume. */
|
|
540
|
+
export function hotspots(store, opts = {}) {
|
|
541
|
+
const limit = opts.limit ?? store.defaultLimit ?? 50;
|
|
542
|
+
const minFanIn = opts.minFanIn ?? 0;
|
|
543
|
+
const kinds = sqlKinds(traversalEdgeKinds({ includeDynamic: opts.includeDynamic ?? true }));
|
|
544
|
+
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties,
|
|
545
|
+
(SELECT COUNT(DISTINCT e.source) FROM edges e
|
|
546
|
+
WHERE e.target = n.id AND e.kind IN (${kinds})) AS fan_in,
|
|
547
|
+
(SELECT COUNT(DISTINCT e.target) FROM edges e
|
|
548
|
+
WHERE e.source = n.id AND e.kind IN (${kinds})) AS fan_out,
|
|
549
|
+
(SELECT COUNT(*) FROM edges e
|
|
550
|
+
WHERE e.target = n.id AND e.kind = 'ADVISES') AS advice_count
|
|
551
|
+
FROM nodes n
|
|
552
|
+
WHERE n.kind IN ('method', 'constructor')
|
|
553
|
+
ORDER BY fan_in DESC, fan_out DESC, n.qualified_name
|
|
554
|
+
LIMIT ?`, limit * 4);
|
|
555
|
+
return rows
|
|
556
|
+
.filter((r) => r.fan_in >= minFanIn)
|
|
557
|
+
.slice(0, limit)
|
|
558
|
+
.map((r) => ({
|
|
559
|
+
symbol: rowToRef(r),
|
|
560
|
+
fanIn: r.fan_in,
|
|
561
|
+
fanOut: r.fan_out,
|
|
562
|
+
adviceCount: r.advice_count,
|
|
563
|
+
}));
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Find methods/constructors with no incoming call, dispatch or advice edges.
|
|
567
|
+
* Heuristic: framework entry points, tests and constructors are excluded by
|
|
568
|
+
* default because they are invoked reflectively or by containers.
|
|
569
|
+
*/
|
|
570
|
+
export function deadCode(store, opts = {}) {
|
|
571
|
+
const limit = opts.limit ?? store.defaultLimit ?? 50;
|
|
572
|
+
const kinds = sqlKinds(traversalEdgeKinds({ includeDynamic: opts.includeDynamic ?? true }));
|
|
573
|
+
const conditions = [
|
|
574
|
+
"n.kind IN ('method', 'constructor')",
|
|
575
|
+
`NOT EXISTS (
|
|
576
|
+
SELECT 1 FROM edges e
|
|
577
|
+
WHERE e.target = n.id AND e.kind IN (${kinds}, 'ADVISES')
|
|
578
|
+
)`,
|
|
579
|
+
"COALESCE(json_extract(n.properties, '$.name'), '') <> 'main'",
|
|
580
|
+
];
|
|
581
|
+
if (!opts.includeConstructors)
|
|
582
|
+
conditions.push("n.kind <> 'constructor'");
|
|
583
|
+
if (!opts.includeTests) {
|
|
584
|
+
conditions.push("REPLACE(n.file_path, '\\', '/') NOT LIKE '%/test/%'", "REPLACE(n.file_path, '\\', '/') NOT LIKE '%/tests/%'", "n.qualified_name NOT LIKE '%Test#%'", "n.qualified_name NOT LIKE '%Tests#%'", "n.qualified_name NOT LIKE '%IT#%'");
|
|
585
|
+
}
|
|
586
|
+
const rows = store.raw(`SELECT n.id, n.qualified_name, n.kind, n.file_path, n.properties
|
|
587
|
+
FROM nodes n
|
|
588
|
+
WHERE ${conditions.join(" AND ")}
|
|
589
|
+
ORDER BY n.qualified_name
|
|
590
|
+
LIMIT ?`, limit);
|
|
591
|
+
return rows.map((r) => ({
|
|
592
|
+
symbol: rowToRef(r),
|
|
593
|
+
reason: "no incoming call, dynamic-dispatch or advice edge",
|
|
594
|
+
}));
|
|
595
|
+
}
|
|
250
596
|
function rowToRef(r) {
|
|
251
597
|
return {
|
|
252
598
|
id: r.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graph/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graph/queries.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/schema.d.ts
CHANGED
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
* can attach extra metadata (signatures, modifiers, confidence scores) without
|
|
10
10
|
* schema migrations.
|
|
11
11
|
*/
|
|
12
|
-
export declare const NODE_KINDS: readonly ["file", "package", "class", "interface", "enum", "method", "constructor", "field", "import", "unknown_symbol"];
|
|
12
|
+
export declare const NODE_KINDS: readonly ["file", "package", "class", "interface", "enum", "annotation_type", "annotation", "aspect", "method", "constructor", "field", "import", "unknown_symbol"];
|
|
13
13
|
export type NodeKind = (typeof NODE_KINDS)[number];
|
|
14
|
-
export declare const EDGE_KINDS: readonly ["CALLS", "DECLARED_IN", "CONTAINS", "IMPLEMENTS", "EXTENDS", "IMPORTS", "REFERENCES"];
|
|
14
|
+
export declare const EDGE_KINDS: readonly ["CALLS", "DYNAMIC_DISPATCH", "ADVISES", "DECLARED_IN", "CONTAINS", "IMPLEMENTS", "EXTENDS", "IMPORTS", "ANNOTATED_WITH", "REFERENCES"];
|
|
15
15
|
export type EdgeKind = (typeof EDGE_KINDS)[number];
|
|
16
16
|
/** Kinds that may appear as call *targets* (nodes at the arrow end of CALLS). */
|
|
17
17
|
export declare const CALLABLE_KINDS: readonly NodeKind[];
|
|
18
|
+
/** Kinds that can be annotated/decorated. */
|
|
19
|
+
export declare const DECORATABLE_KINDS: readonly NodeKind[];
|
|
18
20
|
export interface NodeProperties {
|
|
19
21
|
/** Zero-based line of the declaration start. */
|
|
20
22
|
startLine?: number;
|
|
@@ -24,6 +26,14 @@ export interface NodeProperties {
|
|
|
24
26
|
name?: string;
|
|
25
27
|
/** Fully-qualified name when distinct from the node id. */
|
|
26
28
|
qualifiedName?: string;
|
|
29
|
+
/** Simple names of annotations/decorators applied to this symbol. */
|
|
30
|
+
annotations?: string[];
|
|
31
|
+
/** True when a class is an aspect (e.g. annotated with `@Aspect`). */
|
|
32
|
+
aspect?: boolean;
|
|
33
|
+
/** For advice methods: before | after | around | afterReturning | afterThrowing. */
|
|
34
|
+
adviceKind?: string;
|
|
35
|
+
/** For advice/pointcut methods: the AspectJ pointcut expression. */
|
|
36
|
+
pointcut?: string;
|
|
27
37
|
/** Free-form language-specific metadata. */
|
|
28
38
|
[key: string]: string | number | boolean | (string | number)[] | undefined;
|
|
29
39
|
}
|
|
@@ -43,8 +53,16 @@ export interface EdgeProperties {
|
|
|
43
53
|
resolved?: boolean;
|
|
44
54
|
/** For CALLS edges: heuristic confidence 0..1 when resolved. */
|
|
45
55
|
confidence?: number;
|
|
56
|
+
/** For DYNAMIC_DISPATCH: why the runtime target was inferred. */
|
|
57
|
+
via?: string;
|
|
58
|
+
/** For ADVISES: the advice kind that intercepts the call. */
|
|
59
|
+
adviceKind?: string;
|
|
60
|
+
/** For ADVISES: the pointcut expression that matched. */
|
|
61
|
+
pointcut?: string;
|
|
62
|
+
/** For ANNOTATED_WITH: raw annotation arguments as written in source. */
|
|
63
|
+
arguments?: string[];
|
|
46
64
|
/** Free-form language-specific metadata. */
|
|
47
|
-
[key: string]: string | number | boolean | undefined;
|
|
65
|
+
[key: string]: string | number | boolean | (string | number)[] | undefined;
|
|
48
66
|
}
|
|
49
67
|
export interface GraphEdge {
|
|
50
68
|
source: string;
|
|
@@ -61,3 +79,8 @@ export declare function fieldNodeId(qualifiedType: string, fieldName: string): s
|
|
|
61
79
|
export declare function importNodeId(fqn: string): string;
|
|
62
80
|
/** Fallback id for calls that could not be statically resolved. */
|
|
63
81
|
export declare function unknownNodeId(qualifiedName: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Annotation/decorator ids share one node per annotation name so that
|
|
84
|
+
* `find_annotated` and `get_decorators` can pivot across the whole project.
|
|
85
|
+
*/
|
|
86
|
+
export declare function annotationNodeId(name: string): string;
|