@descryy/adapter-kotlin 0.1.0

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/dist/parse.js ADDED
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Reading Kotlin structure out of a tree-sitter tree.
3
+ *
4
+ * ## Three grammar facts that decide the design
5
+ *
6
+ * **1. `class_declaration` covers class, interface, enum class and data class;
7
+ * `object_declaration` is separate.** The discriminator is the anonymous keyword
8
+ * child plus `modifiers`, exactly as in Swift — there is no `interface_declaration`
9
+ * node to match on. A reader that looked for one finds nothing and emits an empty
10
+ * graph, which is the failure this project keeps meeting: a true report about a
11
+ * graph that is missing everything.
12
+ *
13
+ * **2. A supertype list says which entry is the superclass, and Swift's did not.**
14
+ * `class C : Base(), Repository` parses as two `delegation_specifier` children —
15
+ * the first holding a `constructor_invocation`, the second a bare `user_type`.
16
+ * Kotlin requires the superclass constructor to be invoked and forbids invoking
17
+ * an interface, so **the parentheses are a syntactic discriminator**, not a
18
+ * heuristic.
19
+ *
20
+ * It is still not sufficient. `interface A : B` names a super-interface with no
21
+ * parentheses, and a bare entry in a class declaration may be an interface *or*
22
+ * a superclass whose constructor takes no explicit invocation in a secondary
23
+ * form. So the invocation is recorded as a **prior** and `extract.ts` decides
24
+ * against the declaration table, the same rule Swift uses. Guessing here would
25
+ * put a wrong edge in the graph, and rule 2 makes a wrong edge worse than a
26
+ * missing one.
27
+ *
28
+ * **3. `hasError` is true on trees with zero ERROR nodes.** Measured on a clean
29
+ * fixture: `descendantsOfType("ERROR")` is empty and `rootNode.hasError` is
30
+ * true. This is a property of the pinned grammar (DEC-171 investigated it), so
31
+ * error accounting here counts **ERROR subtrees**, never the flag. Reporting the
32
+ * flag would label every file in every repository as partially unread.
33
+ *
34
+ * ## What is deliberately not read
35
+ *
36
+ * Delegation (`by`), inline/reified generics, `typealias` targets, annotation
37
+ * arguments and destructuring declarations. Each is a place where the written
38
+ * text and the compiled meaning differ, and this adapter is breadth tier.
39
+ */
40
+ import {} from "@descryy/adapter-treesitter";
41
+ import { readKtorRoutes } from "./routes.js";
42
+ import { readKtorClientCalls } from "./client.js";
43
+ import { readSpringRoutes } from "./spring.js";
44
+ import { readRetrofitEndpoints } from "./retrofit.js";
45
+ const lineOf = (node) => node.startPosition.row + 1;
46
+ const namedChildren = (node) => {
47
+ const out = [];
48
+ for (let i = 0; i < node.namedChildCount; i += 1) {
49
+ const child = node.namedChild(i);
50
+ if (child !== null)
51
+ out.push(child);
52
+ }
53
+ return out;
54
+ };
55
+ const childrenOf = (node) => {
56
+ const out = [];
57
+ for (let i = 0; i < node.childCount; i += 1) {
58
+ const child = node.child(i);
59
+ if (child !== null)
60
+ out.push(child);
61
+ }
62
+ return out;
63
+ };
64
+ const firstOfType = (node, type) => namedChildren(node).find((child) => child.type === type);
65
+ /** Every named descendant of a type, depth-first. */
66
+ function descendants(node, type, out = []) {
67
+ for (const child of namedChildren(node)) {
68
+ if (child.type === type)
69
+ out.push(child);
70
+ descendants(child, type, out);
71
+ }
72
+ return out;
73
+ }
74
+ /**
75
+ * ERROR subtrees, counted directly.
76
+ *
77
+ * Header fact 3: `hasError` is true on clean trees under this grammar, so it
78
+ * cannot be used. This walks for the node type instead.
79
+ */
80
+ function hasErrorSubtree(node) {
81
+ if (node.type === "ERROR")
82
+ return true;
83
+ for (const child of childrenOf(node)) {
84
+ if (child.type === "ERROR" || child.isMissing)
85
+ return true;
86
+ if (hasErrorSubtree(child))
87
+ return true;
88
+ }
89
+ return false;
90
+ }
91
+ /** The modifier keywords on a declaration, as written. */
92
+ function modifiersOf(node) {
93
+ const block = firstOfType(node, "modifiers");
94
+ if (block === undefined)
95
+ return [];
96
+ return descendants(block, "simple_identifier")
97
+ .map((n) => n.text)
98
+ .concat(childrenOf(block).flatMap((c) => childrenOf(c).map((k) => k.text)))
99
+ .filter((t) => t !== "");
100
+ }
101
+ /** Annotation names on a declaration — `@Test`, `@Deprecated`. */
102
+ function annotationsOf(node) {
103
+ const block = firstOfType(node, "modifiers");
104
+ if (block === undefined)
105
+ return [];
106
+ const names = [];
107
+ for (const child of namedChildren(block)) {
108
+ if (!child.type.includes("annotation"))
109
+ continue;
110
+ for (const id of descendants(child, "type_identifier"))
111
+ names.push(id.text);
112
+ for (const id of descendants(child, "simple_identifier"))
113
+ names.push(id.text);
114
+ }
115
+ return names;
116
+ }
117
+ /**
118
+ * The keyword a `class_declaration` was written with.
119
+ *
120
+ * Anonymous children, so invisible to `namedChild`. `interface` is checked
121
+ * before `class` because `enum class` and `data class` both carry `class` and
122
+ * only the modifier block separates them.
123
+ */
124
+ function declKindOf(node) {
125
+ if (node.type === "object_declaration")
126
+ return "object";
127
+ if (node.type === "companion_object")
128
+ return "companion";
129
+ for (const child of childrenOf(node)) {
130
+ if (child.isNamed)
131
+ continue;
132
+ if (child.type === "interface")
133
+ return "interface";
134
+ }
135
+ const modifiers = modifiersOf(node);
136
+ if (modifiers.includes("enum"))
137
+ return "enum";
138
+ if (modifiers.includes("annotation"))
139
+ return "annotation";
140
+ for (const child of childrenOf(node)) {
141
+ if (!child.isNamed && child.type === "enum")
142
+ return "enum";
143
+ }
144
+ // A declaration whose keyword is absent from the tree is malformed. `class` is
145
+ // the least specific answer rather than a guess at the most likely one.
146
+ return "class";
147
+ }
148
+ /**
149
+ * A written type, as the dotted path it is written as.
150
+ *
151
+ * `List<Order>` -> `List`. **`DiskLruCache.Snapshot` -> `DiskLruCache.Snapshot`,
152
+ * not `DiskLruCache`.**
153
+ *
154
+ * The first version returned the outermost `type_identifier` and so read a
155
+ * nested type as its enclosing one. Measured on okhttp: `val snapshot:
156
+ * DiskLruCache.Snapshot` typed the local as `DiskLruCache`, and every
157
+ * `snapshot.getSource(...)` was then refused with "getSource is not declared on
158
+ * DiskLruCache" — which is true, it is declared on `Snapshot`. 427 dotted type
159
+ * references on okhttp and 915 on ktor.
160
+ *
161
+ * This is the same defect the Swift adapter had for extension subjects, found
162
+ * there and not carried across, which is why the fix is written the same way:
163
+ * the dotted segments are the `user_type`'s **direct** `type_identifier`
164
+ * children, in order, while a generic argument sits under a `type_arguments`
165
+ * child. So the two cases separate structurally rather than by a rule about
166
+ * angle brackets.
167
+ */
168
+ function typeNameOf(node) {
169
+ const user = findUserType(node);
170
+ if (user === undefined) {
171
+ if (node?.type === "type_identifier")
172
+ return node.text;
173
+ return undefined;
174
+ }
175
+ const segments = namedChildren(user)
176
+ .filter((child) => child.type === "type_identifier")
177
+ .map((child) => child.text);
178
+ return segments.length === 0 ? undefined : segments.join(".");
179
+ }
180
+ /** The first `user_type` at or under a node — past `nullable_type`, `type_annotation`. */
181
+ function findUserType(node) {
182
+ if (node === undefined)
183
+ return undefined;
184
+ if (node.type === "user_type")
185
+ return node;
186
+ for (const child of namedChildren(node)) {
187
+ const found = findUserType(child);
188
+ if (found !== undefined)
189
+ return found;
190
+ }
191
+ return undefined;
192
+ }
193
+ /**
194
+ * A supertype list entry.
195
+ *
196
+ * `constructor_invocation` is the superclass tell — Kotlin requires the
197
+ * superclass constructor to be invoked and forbids invoking an interface. It is
198
+ * recorded, not acted on; see header fact 2.
199
+ */
200
+ function supertypeOf(node) {
201
+ const invocation = firstOfType(node, "constructor_invocation");
202
+ const subject = invocation ?? node;
203
+ const name = typeNameOf(subject);
204
+ if (name === undefined)
205
+ return undefined;
206
+ return { name, invoked: invocation !== undefined, line: lineOf(node) };
207
+ }
208
+ /** Functions under a node, for counting what an anonymous object hides. */
209
+ function countFunctions(node) {
210
+ return descendants(node, "function_declaration").length;
211
+ }
212
+ /**
213
+ * `import a.b.C`, `import a.b.*`, `import a.b.C as D`.
214
+ *
215
+ * The whole dotted path is kept. Unlike Swift's module imports, a Kotlin import
216
+ * names a *symbol or a package*, and which one it is decides whether a reference
217
+ * resolves to it — so truncating to the first segment would lose the fact.
218
+ */
219
+ function readImport(node, walk) {
220
+ const identifier = firstOfType(node, "identifier");
221
+ if (identifier === undefined)
222
+ return;
223
+ const isWildcard = firstOfType(node, "wildcard_import") !== undefined
224
+ || node.text.trimEnd().endsWith(".*");
225
+ const aliasNode = namedChildren(node).find((c) => c.type === "import_alias");
226
+ walk.imports.push({
227
+ path: identifier.text,
228
+ isWildcard,
229
+ alias: aliasNode === undefined ? undefined : typeNameOf(aliasNode) ?? undefined,
230
+ line: lineOf(node),
231
+ });
232
+ }
233
+ /** JUnit and kotlin.test both spell it `@Test`; the import decides which. */
234
+ function testStyleOf(annotations, imports) {
235
+ if (!annotations.includes("Test"))
236
+ return undefined;
237
+ const paths = imports.map((i) => i.path);
238
+ if (paths.some((p) => p.startsWith("kotlin.test")))
239
+ return "kotlin-test";
240
+ if (paths.some((p) => p.startsWith("org.junit")))
241
+ return "junit";
242
+ // A `@Test` with neither import is still a test declaration. JUnit is the
243
+ // larger population, and the style is a label rather than an identity input.
244
+ return "junit";
245
+ }
246
+ /** The written type of a `val`/`var`, when one is stated. Kotlin infers a lot. */
247
+ function propertyTypeOf(node) {
248
+ const declaration = firstOfType(node, "variable_declaration");
249
+ if (declaration === undefined)
250
+ return typeNameOf(firstOfType(node, "user_type"));
251
+ return typeNameOf(firstOfType(declaration, "user_type"));
252
+ }
253
+ function propertyNameOf(node) {
254
+ const declaration = firstOfType(node, "variable_declaration");
255
+ const holder = declaration ?? node;
256
+ return firstOfType(holder, "simple_identifier")?.text;
257
+ }
258
+ /**
259
+ * A call's callee and receiver.
260
+ *
261
+ * `a.b(x)` parses as `call_expression(navigation_expression(a, navigation_suffix(b)), call_suffix)`.
262
+ * A bare `b(x)` is `call_expression(simple_identifier, call_suffix)`.
263
+ */
264
+ function readCall(node, scope, refs) {
265
+ const head = namedChildren(node)[0];
266
+ if (head === undefined)
267
+ return;
268
+ if (head.type === "simple_identifier") {
269
+ refs.push({
270
+ kind: "call",
271
+ name: head.text,
272
+ receiver: undefined,
273
+ hasReceiver: false,
274
+ receiverType: undefined,
275
+ line: lineOf(node),
276
+ });
277
+ return;
278
+ }
279
+ if (head.type === "navigation_expression") {
280
+ const parts = namedChildren(head);
281
+ const target = parts[0];
282
+ const suffix = parts[parts.length - 1];
283
+ const name = suffix === undefined ? undefined : firstOfType(suffix, "simple_identifier")?.text;
284
+ if (name === undefined)
285
+ return;
286
+ // A receiver that is itself an expression — `a.b().c()` — has no written
287
+ // name by construction. `hasReceiver` stays true so the refusal reason says
288
+ // "unreadable receiver" rather than "no declaration for this name".
289
+ const receiver = target?.type === "simple_identifier" ? target.text : undefined;
290
+ refs.push({
291
+ kind: "call",
292
+ name,
293
+ receiver,
294
+ hasReceiver: true,
295
+ receiverType: receiver === undefined ? undefined : scope.locals.get(receiver),
296
+ line: lineOf(node),
297
+ });
298
+ }
299
+ }
300
+ /** Type references written in a body — annotations, parameters, constructions. */
301
+ function readTypeRefs(node, refs) {
302
+ for (const user of descendants(node, "user_type")) {
303
+ const name = typeNameOf(user);
304
+ if (name === undefined)
305
+ continue;
306
+ refs.push({
307
+ kind: "type",
308
+ name,
309
+ receiver: undefined,
310
+ hasReceiver: false,
311
+ receiverType: undefined,
312
+ line: lineOf(user),
313
+ });
314
+ }
315
+ }
316
+ /**
317
+ * A class or enum named as a VALUE through a bare member access — `Status.PENDING`,
318
+ * with no call involved at all. DEC-068: this is real dependency information and
319
+ * is not expressible as CALLS, which targets functions; `resolveType` in
320
+ * `extract.ts` already knows how to turn a name like this into a type, so the
321
+ * ref is emitted with the same `kind: "type"` `readTypeRefs` uses.
322
+ *
323
+ * `callHeads` excludes navigation expressions that are a call's own callee —
324
+ * `repository.findById(id)` is a CALL and is read by `readCall`, not by this;
325
+ * counting it here too would be the same reference reported through two
326
+ * mechanisms rather than a second, genuinely different one.
327
+ */
328
+ function readValueRefs(node, callHeads, refs) {
329
+ for (const nav of descendants(node, "navigation_expression")) {
330
+ if (callHeads.has(nav))
331
+ continue;
332
+ const target = namedChildren(nav)[0];
333
+ if (target?.type !== "simple_identifier")
334
+ continue;
335
+ refs.push({
336
+ kind: "type",
337
+ name: target.text,
338
+ receiver: undefined,
339
+ hasReceiver: false,
340
+ receiverType: undefined,
341
+ line: lineOf(nav),
342
+ });
343
+ }
344
+ }
345
+ /**
346
+ * `property_declaration`s that belong to THIS body, not to something nested in it.
347
+ *
348
+ * `descendants` reaches into method bodies and into a companion object, and both
349
+ * are wrong here: measured on a fixture, a `val h = Helper()` local inside a
350
+ * method was recorded as a property of the enclosing class, and a companion's
351
+ * `const val MAX` was recorded twice — once on the class and once on the
352
+ * companion. A member is a **direct** child of its body.
353
+ */
354
+ function ownProperties(body) {
355
+ return namedChildren(body).filter((c) => c.type === "property_declaration");
356
+ }
357
+ /** Seed a scope's locals from parameters and `val`/`var` declarations. */
358
+ function seedLocals(node, scope, deep) {
359
+ for (const parameter of descendants(node, "parameter")) {
360
+ const name = firstOfType(parameter, "simple_identifier")?.text;
361
+ const type = typeNameOf(firstOfType(parameter, "user_type"));
362
+ if (name !== undefined && type !== undefined)
363
+ scope.locals.set(name, type);
364
+ }
365
+ for (const parameter of descendants(node, "class_parameter")) {
366
+ const name = firstOfType(parameter, "simple_identifier")?.text;
367
+ const type = typeNameOf(firstOfType(parameter, "user_type"));
368
+ if (name !== undefined && type !== undefined)
369
+ scope.locals.set(name, type);
370
+ }
371
+ // A function's locals are anywhere in its body; a class's members are only its
372
+ // direct children. Passing the wrong one is the defect above.
373
+ const properties = deep ? descendants(node, "property_declaration") : ownProperties(node);
374
+ for (const property of properties) {
375
+ const name = propertyNameOf(property);
376
+ const type = propertyTypeOf(property);
377
+ if (name !== undefined && type !== undefined)
378
+ scope.locals.set(name, type);
379
+ }
380
+ }
381
+ function readFunction(node, scope, walk, imports) {
382
+ const name = firstOfType(node, "simple_identifier")?.text;
383
+ if (name === undefined)
384
+ return;
385
+ const annotations = annotationsOf(node);
386
+ const testStyle = testStyleOf(annotations, imports);
387
+ const refs = [];
388
+ const inner = { owners: scope.owners, locals: new Map(scope.locals) };
389
+ // Parameters and locals are seeded BEFORE the body is walked. A method may use
390
+ // a property declared below it and Kotlin allows that; a single forward pass
391
+ // resolves a receiver only when the declaration happens to come first, which
392
+ // makes a resolved edge depend on source order.
393
+ seedLocals(node, inner, true);
394
+ const body = firstOfType(node, "function_body");
395
+ if (body !== undefined) {
396
+ const calls = descendants(body, "call_expression");
397
+ const callHeads = new Set(calls.map((call) => namedChildren(call)[0]).filter((h) => h !== undefined));
398
+ for (const call of calls)
399
+ readCall(call, inner, refs);
400
+ readTypeRefs(body, refs);
401
+ readValueRefs(body, callHeads, refs);
402
+ }
403
+ const parameters = firstOfType(node, "function_value_parameters");
404
+ if (parameters !== undefined)
405
+ readTypeRefs(parameters, refs);
406
+ walk.funcs.push({
407
+ name,
408
+ owners: scope.owners,
409
+ isTest: testStyle !== undefined,
410
+ testStyle,
411
+ startLine: lineOf(node),
412
+ endLine: node.endPosition.row + 1,
413
+ refs,
414
+ });
415
+ }
416
+ function walkNode(node, scope, walk, imports) {
417
+ for (const child of namedChildren(node)) {
418
+ switch (child.type) {
419
+ case "class_declaration":
420
+ case "object_declaration":
421
+ case "companion_object": {
422
+ const kind = declKindOf(child);
423
+ // A companion object is named `Companion` when it is anonymous, which is
424
+ // the JVM's own name for it and is stable. Anything else would churn.
425
+ const declared = firstOfType(child, "type_identifier")?.text;
426
+ const name = declared ?? (kind === "companion" ? "Companion" : undefined);
427
+ if (name === undefined)
428
+ break;
429
+ const supertypes = namedChildren(child)
430
+ .filter((c) => c.type === "delegation_specifier")
431
+ .map(supertypeOf)
432
+ .filter((s) => s !== undefined);
433
+ walk.decls.push({
434
+ kind,
435
+ name,
436
+ owners: scope.owners,
437
+ supertypes,
438
+ startLine: lineOf(child),
439
+ endLine: child.endPosition.row + 1,
440
+ });
441
+ const inner = { owners: [...scope.owners, name], locals: new Map() };
442
+ const constructor = firstOfType(child, "primary_constructor");
443
+ if (constructor !== undefined) {
444
+ seedLocals(constructor, inner, true);
445
+ // `data class Order(val id: String)` declares a PROPERTY, not just a
446
+ // parameter — the `val`/`var` binding is what makes it one, and a
447
+ // parameter without it is not a member. Kotlin's data classes put most
448
+ // model fields here, so a reader that only walks the class body reads
449
+ // a model with no fields and reports it as a fact about the model.
450
+ for (const parameter of namedChildren(constructor)) {
451
+ if (parameter.type !== "class_parameter")
452
+ continue;
453
+ const binding = firstOfType(parameter, "binding_pattern_kind");
454
+ if (binding === undefined)
455
+ continue;
456
+ const propertyName = firstOfType(parameter, "simple_identifier")?.text;
457
+ if (propertyName === undefined)
458
+ continue;
459
+ walk.properties.push({
460
+ name: propertyName,
461
+ owners: inner.owners,
462
+ type: typeNameOf(firstOfType(parameter, "user_type")),
463
+ line: lineOf(parameter),
464
+ });
465
+ }
466
+ }
467
+ const body = namedChildren(child).find((c) => c.type === "class_body" || c.type === "enum_class_body");
468
+ if (body !== undefined) {
469
+ seedLocals(body, inner, false);
470
+ for (const property of ownProperties(body)) {
471
+ const propertyName = propertyNameOf(property);
472
+ if (propertyName === undefined)
473
+ continue;
474
+ walk.properties.push({
475
+ name: propertyName,
476
+ owners: inner.owners,
477
+ type: propertyTypeOf(property),
478
+ line: lineOf(property),
479
+ });
480
+ }
481
+ walkNode(body, inner, walk, imports);
482
+ }
483
+ break;
484
+ }
485
+ case "function_declaration":
486
+ readFunction(child, scope, walk, imports);
487
+ break;
488
+ case "lambda_literal":
489
+ // A declaration inside a lambda body is never a top-level declaration,
490
+ // and this branch exists because the grammar makes that load-bearing.
491
+ //
492
+ // tree-sitter-kotlin 0.3.8 does not support `fun interface` — Kotlin's
493
+ // SAM interface. `fun interface Dns { interface Call; class Request }`
494
+ // parses as an ERROR node followed by an ORPHANED `lambda_literal`
495
+ // holding the body, so `Call` and `Request` arrive with no owners and
496
+ // were minted as top-level `okhttp3.Call` and `okhttp3.Request`.
497
+ //
498
+ // That is a WRONG node, not a missing one: it gave `import
499
+ // okhttp3.Request` an edge to a type that is really `okhttp3.Dns.Request`.
500
+ // Rule 2 ranks a wrong node worse, so the body is not walked and the
501
+ // count is disclosed. Same family as the single-line `class_body`
502
+ // limitation already recorded in grammar.json.
503
+ walk.unparseableDeclarations += descendants(child, "class_declaration").length;
504
+ break;
505
+ case "object_literal":
506
+ // `object : DerAdapter<Long> { override fun encode(...) }` — an
507
+ // ANONYMOUS type. It has no name, so its members have no qualified
508
+ // symbol path and cannot be given an identity.
509
+ //
510
+ // Walking into it with the ENCLOSING scope is what the default branch
511
+ // below used to do, and it is worse than skipping: measured on okhttp,
512
+ // `der/Adapters.kt` declares `override fun encode` fourteen times in
513
+ // fourteen anonymous objects, and all fourteen collapsed onto one node
514
+ // owned by the enclosing `Adapters`. Calls from the other thirteen were
515
+ // then attributed to the survivor — WRONG edges, not missing ones, and
516
+ // both of that repository's CALLS precision failures were this.
517
+ //
518
+ // So the body is not walked. The members are unreachable at R2 and that
519
+ // is a disclosed gap rather than an invented owner.
520
+ walk.anonymousMembers += countFunctions(child);
521
+ break;
522
+ default:
523
+ // `statements`, `class_body` contents and anything else that can hold a
524
+ // declaration are walked through rather than matched on, so a construct
525
+ // this reader does not know about does not hide the ones it does.
526
+ if (child.namedChildCount > 0)
527
+ walkNode(child, scope, walk, imports);
528
+ }
529
+ }
530
+ }
531
+ /** Parse one Kotlin file into the structures `extract.ts` consumes. */
532
+ export function readKotlinFile(file, tree) {
533
+ const root = tree.rootNode;
534
+ const walk = { anonymousMembers: 0, unparseableDeclarations: 0, imports: [], decls: [], funcs: [], properties: [] };
535
+ const header = firstOfType(root, "package_header");
536
+ const packageName = header === undefined ? "" : firstOfType(header, "identifier")?.text ?? "";
537
+ // Imports are read first so `testStyleOf` can see them while walking bodies.
538
+ const importList = firstOfType(root, "import_list");
539
+ if (importList !== undefined) {
540
+ for (const child of namedChildren(importList)) {
541
+ if (child.type === "import_header")
542
+ readImport(child, walk);
543
+ }
544
+ }
545
+ walkNode(root, { owners: [], locals: new Map() }, walk, walk.imports);
546
+ // After the walk, because provenance is decided by the import table and the
547
+ // import may sit anywhere above the routing block that needs it.
548
+ const routes = readKtorRoutes(root, walk.imports);
549
+ const client = readKtorClientCalls(root, walk.imports);
550
+ const springRoutes = readSpringRoutes(root, walk.imports);
551
+ const retrofit = readRetrofitEndpoints(root, walk.imports);
552
+ return {
553
+ file,
554
+ hasError: hasErrorSubtree(root),
555
+ packageName,
556
+ imports: walk.imports,
557
+ decls: walk.decls,
558
+ funcs: walk.funcs,
559
+ properties: walk.properties,
560
+ anonymousMembers: walk.anonymousMembers,
561
+ unparseableDeclarations: walk.unparseableDeclarations,
562
+ identityPackage: undefined,
563
+ routes: [...routes.declarations, ...springRoutes],
564
+ routeRefusals: routes.refusals,
565
+ clientCalls: client.calls,
566
+ clientRefusals: client.refusals,
567
+ retrofitEndpoints: retrofit.declarations,
568
+ retrofitRefusals: retrofit.refusals,
569
+ };
570
+ }
571
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}