@openrewrite/rewrite 8.62.0 → 8.62.2
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/java/rpc.d.ts +3 -3
- package/dist/java/rpc.d.ts.map +1 -1
- package/dist/java/rpc.js +6 -6
- package/dist/java/rpc.js.map +1 -1
- package/dist/java/tree.d.ts +31 -33
- package/dist/java/tree.d.ts.map +1 -1
- package/dist/java/tree.js +125 -7
- package/dist/java/tree.js.map +1 -1
- package/dist/java/type.d.ts +70 -57
- package/dist/java/type.d.ts.map +1 -1
- package/dist/java/type.js +454 -25
- package/dist/java/type.js.map +1 -1
- package/dist/java/visitor.d.ts +4 -4
- package/dist/java/visitor.d.ts.map +1 -1
- package/dist/java/visitor.js +34 -28
- package/dist/java/visitor.js.map +1 -1
- package/dist/javascript/assertions.d.ts +3 -0
- package/dist/javascript/assertions.d.ts.map +1 -1
- package/dist/javascript/assertions.js +78 -1
- package/dist/javascript/assertions.js.map +1 -1
- package/dist/javascript/format.js +4 -4
- package/dist/javascript/format.js.map +1 -1
- package/dist/javascript/parser.d.ts +1 -1
- package/dist/javascript/parser.d.ts.map +1 -1
- package/dist/javascript/parser.js +38 -11
- package/dist/javascript/parser.js.map +1 -1
- package/dist/javascript/rpc.js +1 -4
- package/dist/javascript/rpc.js.map +1 -1
- package/dist/javascript/tree.d.ts +33 -35
- package/dist/javascript/tree.d.ts.map +1 -1
- package/dist/javascript/tree.js +70 -17
- package/dist/javascript/tree.js.map +1 -1
- package/dist/javascript/type-mapping.d.ts +44 -8
- package/dist/javascript/type-mapping.d.ts.map +1 -1
- package/dist/javascript/type-mapping.js +571 -101
- package/dist/javascript/type-mapping.js.map +1 -1
- package/dist/javascript/visitor.d.ts +2 -2
- package/dist/javascript/visitor.d.ts.map +1 -1
- package/dist/javascript/visitor.js.map +1 -1
- package/dist/json/tree.d.ts +0 -2
- package/dist/json/tree.d.ts.map +1 -1
- package/dist/json/tree.js +12 -2
- package/dist/json/tree.js.map +1 -1
- package/dist/reference.js +1 -1
- package/dist/reference.js.map +1 -1
- package/dist/rpc/chrome-profiler.d.ts +25 -0
- package/dist/rpc/chrome-profiler.d.ts.map +1 -0
- package/dist/rpc/chrome-profiler.js +405 -0
- package/dist/rpc/chrome-profiler.js.map +1 -0
- package/dist/rpc/queue.d.ts +0 -3
- package/dist/rpc/queue.d.ts.map +1 -1
- package/dist/rpc/queue.js +6 -6
- package/dist/rpc/queue.js.map +1 -1
- package/dist/rpc/request/parse.d.ts.map +1 -1
- package/dist/rpc/request/parse.js.map +1 -1
- package/dist/rpc/rewrite-rpc.d.ts +1 -0
- package/dist/rpc/rewrite-rpc.d.ts.map +1 -1
- package/dist/rpc/rewrite-rpc.js +1 -1
- package/dist/rpc/rewrite-rpc.js.map +1 -1
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +26 -1
- package/dist/rpc/server.js.map +1 -1
- package/dist/test/rewrite-test.d.ts +1 -1
- package/dist/test/rewrite-test.d.ts.map +1 -1
- package/dist/test/rewrite-test.js +18 -2
- package/dist/test/rewrite-test.js.map +1 -1
- package/dist/text/tree.d.ts +0 -2
- package/dist/text/tree.d.ts.map +1 -1
- package/dist/text/tree.js +4 -17
- package/dist/text/tree.js.map +1 -1
- package/dist/tree.d.ts +1 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +14 -0
- package/dist/tree.js.map +1 -1
- package/dist/version.txt +1 -1
- package/package.json +3 -3
- package/src/java/rpc.ts +18 -15
- package/src/java/tree.ts +68 -38
- package/src/java/type.ts +475 -74
- package/src/java/visitor.ts +45 -39
- package/src/javascript/assertions.ts +52 -1
- package/src/javascript/format.ts +4 -4
- package/src/javascript/parser.ts +51 -18
- package/src/javascript/rpc.ts +8 -10
- package/src/javascript/tree.ts +34 -35
- package/src/javascript/type-mapping.ts +582 -47
- package/src/javascript/visitor.ts +5 -5
- package/src/json/tree.ts +1 -2
- package/src/reference.ts +1 -1
- package/src/rpc/chrome-profiler.ts +373 -0
- package/src/rpc/queue.ts +8 -12
- package/src/rpc/request/parse.ts +1 -1
- package/src/rpc/rewrite-rpc.ts +3 -2
- package/src/rpc/server.ts +30 -1
- package/src/test/rewrite-test.ts +19 -3
- package/src/text/tree.ts +0 -1
- package/src/tree.ts +15 -0
package/src/java/type.ts
CHANGED
|
@@ -13,16 +13,19 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {asRef} from "../rpc";
|
|
16
|
+
import {asRef, RpcCodecs, RpcReceiveQueue, RpcSendQueue} from "../rpc";
|
|
17
|
+
import {immerable} from "immer";
|
|
17
18
|
|
|
18
|
-
export interface
|
|
19
|
+
export interface Type {
|
|
19
20
|
readonly kind: string;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
export namespace
|
|
23
|
+
export namespace Type {
|
|
23
24
|
export const Kind = {
|
|
24
25
|
Annotation: "org.openrewrite.java.tree.JavaType$Annotation",
|
|
25
26
|
AnnotationElementValue: "org.openrewrite.java.tree.JavaType$Annotation$ElementValue",
|
|
27
|
+
SingleElementValue: "org.openrewrite.java.tree.JavaType$Annotation$SingleElementValue",
|
|
28
|
+
ArrayElementValue: "org.openrewrite.java.tree.JavaType$Annotation$ArrayElementValue",
|
|
26
29
|
Array: "org.openrewrite.java.tree.JavaType$Array",
|
|
27
30
|
Class: "org.openrewrite.java.tree.JavaType$Class",
|
|
28
31
|
GenericTypeVariable: "org.openrewrite.java.tree.JavaType$GenericTypeVariable",
|
|
@@ -36,17 +39,19 @@ export namespace JavaType {
|
|
|
36
39
|
Variable: "org.openrewrite.java.tree.JavaType$Variable",
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
export interface Class extends
|
|
42
|
+
export interface Class extends Type, FullyQualified {
|
|
40
43
|
readonly kind: typeof Kind.Class,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
classKind: Class.Kind;
|
|
45
|
+
fullyQualifiedName: string;
|
|
46
|
+
typeParameters: Type[];
|
|
47
|
+
supertype?: Type.Class;
|
|
48
|
+
owningClass?: Type.Class;
|
|
49
|
+
annotations: Type.Annotation[];
|
|
50
|
+
interfaces: Type.Class[];
|
|
51
|
+
members: Type.Variable[];
|
|
52
|
+
methods: Type.Method[];
|
|
53
|
+
|
|
54
|
+
toJSON?(): string;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
export namespace Class {
|
|
@@ -60,52 +65,64 @@ export namespace JavaType {
|
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
|
|
63
|
-
export interface Annotation extends
|
|
68
|
+
export interface Annotation extends Type, FullyQualified {
|
|
64
69
|
readonly kind: typeof Kind.Annotation,
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
type: Type.FullyQualified;
|
|
71
|
+
values: Annotation.ElementValue[];
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
export namespace Annotation {
|
|
70
|
-
export
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
readonly
|
|
75
|
+
export type ElementValue = SingleElementValue | ArrayElementValue;
|
|
76
|
+
|
|
77
|
+
export interface SingleElementValue {
|
|
78
|
+
readonly kind: typeof Kind.SingleElementValue;
|
|
79
|
+
element: Type;
|
|
80
|
+
constantValue?: any;
|
|
81
|
+
referenceValue?: Type;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface ArrayElementValue {
|
|
85
|
+
readonly kind: typeof Kind.ArrayElementValue;
|
|
86
|
+
element: Type;
|
|
87
|
+
constantValues?: any[];
|
|
88
|
+
referenceValues?: Type[];
|
|
74
89
|
}
|
|
75
90
|
}
|
|
76
91
|
|
|
77
|
-
export interface Method extends
|
|
92
|
+
export interface Method extends Type {
|
|
78
93
|
readonly kind: typeof Kind.Method;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface Variable extends
|
|
94
|
+
declaringType: Type.FullyQualified;
|
|
95
|
+
name: string;
|
|
96
|
+
returnType: Type;
|
|
97
|
+
parameterNames: string[];
|
|
98
|
+
parameterTypes: Type[];
|
|
99
|
+
thrownExceptions: Type[];
|
|
100
|
+
annotations: Type.Annotation[];
|
|
101
|
+
defaultValue?: string[];
|
|
102
|
+
declaredFormalTypeNames: string[];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface Variable extends Type {
|
|
91
106
|
readonly kind: typeof Kind.Variable;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
107
|
+
name: string;
|
|
108
|
+
owner?: Type;
|
|
109
|
+
type: Type;
|
|
110
|
+
annotations: Type.Annotation[];
|
|
111
|
+
|
|
112
|
+
toJSON?(): string;
|
|
96
113
|
}
|
|
97
114
|
|
|
98
|
-
export interface Parameterized extends
|
|
115
|
+
export interface Parameterized extends Type, FullyQualified {
|
|
99
116
|
readonly kind: typeof Kind.Parameterized;
|
|
100
|
-
|
|
101
|
-
|
|
117
|
+
type: Type.FullyQualified;
|
|
118
|
+
typeParameters: Type[];
|
|
102
119
|
}
|
|
103
120
|
|
|
104
|
-
export interface GenericTypeVariable extends
|
|
121
|
+
export interface GenericTypeVariable extends Type {
|
|
105
122
|
readonly kind: typeof Kind.GenericTypeVariable;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
123
|
+
name: string;
|
|
124
|
+
variance: GenericTypeVariable.Variance;
|
|
125
|
+
bounds: Type[];
|
|
109
126
|
}
|
|
110
127
|
|
|
111
128
|
export namespace GenericTypeVariable {
|
|
@@ -116,17 +133,17 @@ export namespace JavaType {
|
|
|
116
133
|
}
|
|
117
134
|
}
|
|
118
135
|
|
|
119
|
-
export interface Array extends
|
|
136
|
+
export interface Array extends Type, FullyQualified {
|
|
120
137
|
readonly kind: typeof Kind.Array;
|
|
121
|
-
|
|
122
|
-
|
|
138
|
+
elemType: Type;
|
|
139
|
+
annotations: Type.Annotation[];
|
|
123
140
|
}
|
|
124
141
|
|
|
125
142
|
|
|
126
|
-
export class Primitive implements
|
|
143
|
+
export class Primitive implements Type {
|
|
127
144
|
private constructor(
|
|
128
145
|
public readonly keyword: string,
|
|
129
|
-
public readonly kind =
|
|
146
|
+
public readonly kind = Type.Kind.Primitive
|
|
130
147
|
) {
|
|
131
148
|
}
|
|
132
149
|
|
|
@@ -194,58 +211,442 @@ export namespace JavaType {
|
|
|
194
211
|
}
|
|
195
212
|
}
|
|
196
213
|
|
|
197
|
-
export interface Union extends
|
|
214
|
+
export interface Union extends Type {
|
|
198
215
|
readonly kind: typeof Kind.Union;
|
|
199
|
-
|
|
216
|
+
bounds: Type[];
|
|
200
217
|
}
|
|
201
218
|
|
|
202
|
-
export interface Intersection extends
|
|
219
|
+
export interface Intersection extends Type {
|
|
203
220
|
readonly kind: typeof Kind.Intersection;
|
|
204
|
-
|
|
221
|
+
bounds: Type[];
|
|
205
222
|
}
|
|
206
223
|
|
|
207
|
-
export interface ShallowClass extends
|
|
224
|
+
export interface ShallowClass extends Type.Class {
|
|
208
225
|
readonly kind: typeof Kind.ShallowClass;
|
|
209
226
|
}
|
|
210
227
|
|
|
211
|
-
export const unknownType:
|
|
212
|
-
kind:
|
|
228
|
+
export const unknownType: Type = asRef({
|
|
229
|
+
kind: Type.Kind.Unknown
|
|
213
230
|
});
|
|
214
231
|
|
|
215
|
-
export function isPrimitive(type?:
|
|
216
|
-
return type?.kind ===
|
|
232
|
+
export function isPrimitive(type?: Type): type is Type.Primitive {
|
|
233
|
+
return type?.kind === Type.Kind.Primitive;
|
|
217
234
|
}
|
|
218
235
|
|
|
219
|
-
export function isClass(type?:
|
|
220
|
-
return type?.kind ===
|
|
236
|
+
export function isClass(type?: Type): type is Type.Class {
|
|
237
|
+
return type?.kind === Type.Kind.Class;
|
|
221
238
|
}
|
|
222
239
|
|
|
223
|
-
export function isArray(type?:
|
|
224
|
-
return type?.kind ===
|
|
240
|
+
export function isArray(type?: Type): type is Type.Array {
|
|
241
|
+
return type?.kind === Type.Kind.Array;
|
|
225
242
|
}
|
|
226
243
|
|
|
227
|
-
export function isParameterized(type?:
|
|
228
|
-
return type?.kind ===
|
|
244
|
+
export function isParameterized(type?: Type): type is Type.Parameterized {
|
|
245
|
+
return type?.kind === Type.Kind.Parameterized;
|
|
229
246
|
}
|
|
230
247
|
|
|
231
|
-
export interface FullyQualified extends
|
|
248
|
+
export interface FullyQualified extends Type {
|
|
232
249
|
}
|
|
233
250
|
|
|
234
251
|
export namespace FullyQualified {
|
|
235
252
|
export function getFullyQualifiedName(javaType: FullyQualified): string {
|
|
236
253
|
switch (javaType.kind) {
|
|
237
|
-
case
|
|
238
|
-
return (javaType as
|
|
239
|
-
case
|
|
240
|
-
return getFullyQualifiedName((javaType as
|
|
241
|
-
case
|
|
242
|
-
return getFullyQualifiedName((javaType as
|
|
243
|
-
case
|
|
244
|
-
return (javaType as
|
|
245
|
-
case
|
|
254
|
+
case Type.Kind.Class:
|
|
255
|
+
return (javaType as Type.Class).fullyQualifiedName;
|
|
256
|
+
case Type.Kind.Parameterized:
|
|
257
|
+
return getFullyQualifiedName((javaType as Type.Parameterized).type);
|
|
258
|
+
case Type.Kind.Annotation:
|
|
259
|
+
return getFullyQualifiedName((javaType as Type.Annotation).type);
|
|
260
|
+
case Type.Kind.ShallowClass:
|
|
261
|
+
return (javaType as Type.ShallowClass).fullyQualifiedName;
|
|
262
|
+
case Type.Kind.Unknown:
|
|
246
263
|
return "<unknown>";
|
|
247
264
|
}
|
|
248
265
|
throw new Error("Cannot get fully qualified name of type: " + JSON.stringify(javaType));
|
|
249
266
|
}
|
|
250
267
|
}
|
|
268
|
+
|
|
269
|
+
// Track type variable names and parameterized types to prevent infinite recursion
|
|
270
|
+
let typeVariableNameStack: Set<string> | null = null;
|
|
271
|
+
let parameterizedStack: Set<Type> | null = null;
|
|
272
|
+
|
|
273
|
+
export function signature(type: Type | undefined | null): string {
|
|
274
|
+
if (!type) {
|
|
275
|
+
return "<null>";
|
|
276
|
+
}
|
|
277
|
+
switch (type.kind) {
|
|
278
|
+
case Type.Kind.Array: {
|
|
279
|
+
const arr = type as Type.Array;
|
|
280
|
+
return signature(arr.elemType) + "[]";
|
|
281
|
+
}
|
|
282
|
+
case Type.Kind.Class:
|
|
283
|
+
case Type.Kind.ShallowClass: {
|
|
284
|
+
const clazz = type as Type.Class;
|
|
285
|
+
return clazz.fullyQualifiedName;
|
|
286
|
+
}
|
|
287
|
+
case Type.Kind.GenericTypeVariable: {
|
|
288
|
+
const generic = type as Type.GenericTypeVariable;
|
|
289
|
+
let result = "Generic{" + generic.name;
|
|
290
|
+
|
|
291
|
+
// Initialize stack if needed
|
|
292
|
+
if (typeVariableNameStack === null) {
|
|
293
|
+
typeVariableNameStack = new Set<string>();
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Check for recursion in type variable names
|
|
297
|
+
if (generic.name !== "?" && typeVariableNameStack.has(generic.name)) {
|
|
298
|
+
return result + "}";
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Add to stack to track
|
|
302
|
+
if (generic.name !== "?") {
|
|
303
|
+
typeVariableNameStack.add(generic.name);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
try {
|
|
307
|
+
if (!generic.bounds || generic.bounds.length === 0) {
|
|
308
|
+
return result + "}";
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Filter out bounds that would cause cycles through parameterized types
|
|
312
|
+
const safeBounds = generic.bounds.filter(b => {
|
|
313
|
+
return !parameterizedStack || !parameterizedStack.has(b);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
if (safeBounds.length > 0) {
|
|
317
|
+
const bounds = safeBounds.map(b => signature(b)).join(" & ");
|
|
318
|
+
result += " extends " + bounds;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return result + "}";
|
|
322
|
+
} finally {
|
|
323
|
+
// Remove from stack when done
|
|
324
|
+
if (generic.name !== "?") {
|
|
325
|
+
typeVariableNameStack.delete(generic.name);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
case Type.Kind.Intersection: {
|
|
330
|
+
const intersection = type as Type.Intersection;
|
|
331
|
+
return (intersection.bounds || []).map(b => signature(b)).join(" & ");
|
|
332
|
+
}
|
|
333
|
+
case Type.Kind.Method: {
|
|
334
|
+
const method = type as Type.Method;
|
|
335
|
+
const declaringType = signature(method.declaringType);
|
|
336
|
+
const params = (method.parameterTypes || []).map(p => signature(p)).join(", ");
|
|
337
|
+
return declaringType + "{name=" + method.name + ",return=" + signature(method.returnType) + ",parameters=[" + params + "]}";
|
|
338
|
+
}
|
|
339
|
+
case Type.Kind.Parameterized: {
|
|
340
|
+
const parameterized = type as Type.Parameterized;
|
|
341
|
+
|
|
342
|
+
// Initialize stack if needed
|
|
343
|
+
if (parameterizedStack === null) {
|
|
344
|
+
parameterizedStack = new Set<Type>();
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Add to stack to track cycles
|
|
348
|
+
parameterizedStack.add(parameterized);
|
|
349
|
+
|
|
350
|
+
try {
|
|
351
|
+
const baseType = signature(parameterized.type);
|
|
352
|
+
if (!parameterized.typeParameters || parameterized.typeParameters.length === 0) {
|
|
353
|
+
return baseType;
|
|
354
|
+
}
|
|
355
|
+
const params = parameterized.typeParameters.map(p => signature(p)).join(", ");
|
|
356
|
+
return baseType + "<" + params + ">";
|
|
357
|
+
} finally {
|
|
358
|
+
// Remove from stack when done
|
|
359
|
+
parameterizedStack.delete(parameterized);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
case Type.Kind.Primitive: {
|
|
363
|
+
const primitive = type as Type.Primitive;
|
|
364
|
+
return primitive.keyword;
|
|
365
|
+
}
|
|
366
|
+
case Type.Kind.Union: {
|
|
367
|
+
const union = type as Type.Union;
|
|
368
|
+
return (union.bounds || []).map(b => signature(b)).join(" | ");
|
|
369
|
+
}
|
|
370
|
+
case Type.Kind.Unknown: {
|
|
371
|
+
return "<unknown>";
|
|
372
|
+
}
|
|
373
|
+
case Type.Kind.Variable: {
|
|
374
|
+
const variable = type as Type.Variable;
|
|
375
|
+
const ownerSig = variable.owner ? signature(variable.owner) + "{" : "";
|
|
376
|
+
const closeBrace = variable.owner ? "}" : "";
|
|
377
|
+
return ownerSig + "name=" + variable.name + ",type=" + signature(variable.type) + closeBrace;
|
|
378
|
+
}
|
|
379
|
+
case Type.Kind.Annotation: {
|
|
380
|
+
const annotation = type as Type.Annotation;
|
|
381
|
+
return "@" + signature(annotation.type);
|
|
382
|
+
}
|
|
383
|
+
default:
|
|
384
|
+
return "<unknown>";
|
|
385
|
+
}
|
|
386
|
+
}
|
|
251
387
|
}
|
|
388
|
+
|
|
389
|
+
RpcCodecs.registerCodec(Type.Kind.Primitive, {
|
|
390
|
+
async rpcSend(after: Type.Primitive, q: RpcSendQueue): Promise<void> {
|
|
391
|
+
await q.getAndSend(after, p => p.keyword);
|
|
392
|
+
},
|
|
393
|
+
async rpcReceive(before: Type.Primitive, q: RpcReceiveQueue): Promise<Type.Primitive> {
|
|
394
|
+
const keyword: string = await q.receive(before.keyword);
|
|
395
|
+
return Type.Primitive.fromKeyword(keyword)!;
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
RpcCodecs.registerCodec(Type.Kind.Class, {
|
|
400
|
+
async rpcSend(after: Type.Class, q: RpcSendQueue): Promise<void> {
|
|
401
|
+
await q.getAndSend(after, c => c.classKind);
|
|
402
|
+
await q.getAndSend(after, c => c.fullyQualifiedName);
|
|
403
|
+
await q.getAndSendList(after, c => (c.typeParameters || []).map(t => asRef(t)), t => Type.signature(t));
|
|
404
|
+
await q.getAndSend(after, c => asRef(c.supertype));
|
|
405
|
+
await q.getAndSend(after, c => asRef(c.owningClass));
|
|
406
|
+
await q.getAndSendList(after, c => (c.annotations || []).map(a => asRef(a)), t => Type.signature(t));
|
|
407
|
+
await q.getAndSendList(after, c => (c.interfaces || []).map(i => asRef(i)), t => Type.signature(t));
|
|
408
|
+
await q.getAndSendList(after, c => (c.members || []).map(m => asRef(m)), t => Type.signature(t));
|
|
409
|
+
await q.getAndSendList(after, c => (c.methods || []).map(m => asRef(m)), t => Type.signature(t));
|
|
410
|
+
},
|
|
411
|
+
async rpcReceive(before: Type.Class, q: RpcReceiveQueue): Promise<Type.Class> {
|
|
412
|
+
// Mutate the before object in place to preserve reference identity
|
|
413
|
+
before.classKind = await q.receive(before.classKind);
|
|
414
|
+
before.fullyQualifiedName = await q.receive(before.fullyQualifiedName);
|
|
415
|
+
before.typeParameters = await q.receiveList(before.typeParameters) || [];
|
|
416
|
+
before.supertype = await q.receive(before.supertype);
|
|
417
|
+
before.owningClass = await q.receive(before.owningClass);
|
|
418
|
+
before.annotations = await q.receiveList(before.annotations) || [];
|
|
419
|
+
before.interfaces = await q.receiveList(before.interfaces) || [];
|
|
420
|
+
before.members = await q.receiveList(before.members) || [];
|
|
421
|
+
before.methods = await q.receiveList(before.methods) || [];
|
|
422
|
+
(before as any).toJSON = function () {
|
|
423
|
+
return Type.signature(this);
|
|
424
|
+
};
|
|
425
|
+
// Mark as non-draftable to prevent immer from processing circular references
|
|
426
|
+
(before as any)[immerable] = false;
|
|
427
|
+
|
|
428
|
+
return before;
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
RpcCodecs.registerCodec(Type.Kind.Variable, {
|
|
433
|
+
async rpcSend(after: Type.Variable, q: RpcSendQueue): Promise<void> {
|
|
434
|
+
await q.getAndSend(after, v => v.name);
|
|
435
|
+
await q.getAndSend(after, v => v.owner ? asRef(v.owner) : undefined);
|
|
436
|
+
await q.getAndSend(after, v => asRef(v.type));
|
|
437
|
+
await q.getAndSendList(after, v => (v.annotations || []).map(v2 => asRef(v2)), t => Type.signature(t));
|
|
438
|
+
},
|
|
439
|
+
async rpcReceive(before: Type.Variable, q: RpcReceiveQueue): Promise<Type.Variable> {
|
|
440
|
+
// Mutate the before object in place to preserve reference identity
|
|
441
|
+
before.name = await q.receive(before.name);
|
|
442
|
+
before.owner = await q.receive(before.owner);
|
|
443
|
+
before.type = await q.receive(before.type);
|
|
444
|
+
before.annotations = await q.receiveList(before.annotations) || [];
|
|
445
|
+
return before;
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
RpcCodecs.registerCodec(Type.Kind.Annotation, {
|
|
450
|
+
async rpcSend(after: Type.Annotation, q: RpcSendQueue): Promise<void> {
|
|
451
|
+
await q.getAndSend(after, a => asRef(a.type));
|
|
452
|
+
await q.getAndSendList(after, a => (a.values || []).map(v => asRef(v)), v => {
|
|
453
|
+
let value: any;
|
|
454
|
+
if (v.kind === Type.Kind.SingleElementValue) {
|
|
455
|
+
const single = v as Type.Annotation.SingleElementValue;
|
|
456
|
+
value = single.constantValue !== undefined ? single.constantValue : single.referenceValue;
|
|
457
|
+
} else {
|
|
458
|
+
const array = v as Type.Annotation.ArrayElementValue;
|
|
459
|
+
value = array.constantValues || array.referenceValues;
|
|
460
|
+
}
|
|
461
|
+
return `${Type.signature(v.element)}:${value == null ? "null" : value.toString()}`;
|
|
462
|
+
});
|
|
463
|
+
},
|
|
464
|
+
async rpcReceive(before: Type.Annotation, q: RpcReceiveQueue): Promise<Type.Annotation> {
|
|
465
|
+
// Mutate the before object in place to preserve reference identity
|
|
466
|
+
before.type = await q.receive(before.type);
|
|
467
|
+
before.values = await q.receiveList(before.values) || [];
|
|
468
|
+
return before;
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
RpcCodecs.registerCodec(Type.Kind.SingleElementValue, {
|
|
473
|
+
async rpcSend(after: Type.Annotation.SingleElementValue, q: RpcSendQueue): Promise<void> {
|
|
474
|
+
await q.getAndSend(after, e => asRef(e.element));
|
|
475
|
+
await q.getAndSend(after, e => e.constantValue);
|
|
476
|
+
await q.getAndSend(after, e => asRef(e.referenceValue));
|
|
477
|
+
},
|
|
478
|
+
async rpcReceive(before: Type.Annotation.SingleElementValue | undefined, q: RpcReceiveQueue): Promise<Type.Annotation.SingleElementValue> {
|
|
479
|
+
if (!before) {
|
|
480
|
+
return {
|
|
481
|
+
kind: Type.Kind.SingleElementValue,
|
|
482
|
+
element: (await q.receive(undefined) as unknown) as Type,
|
|
483
|
+
constantValue: await q.receive(undefined),
|
|
484
|
+
referenceValue: await q.receive(undefined)
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
// Mutate the before object in place to preserve reference identity
|
|
488
|
+
before.element = await q.receive(before.element);
|
|
489
|
+
before.constantValue = await q.receive(before.constantValue);
|
|
490
|
+
before.referenceValue = await q.receive(before.referenceValue);
|
|
491
|
+
return before;
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
RpcCodecs.registerCodec(Type.Kind.ArrayElementValue, {
|
|
496
|
+
async rpcSend(after: Type.Annotation.ArrayElementValue, q: RpcSendQueue): Promise<void> {
|
|
497
|
+
await q.getAndSend(after, e => asRef(e.element));
|
|
498
|
+
await q.getAndSendList(after, e => e.constantValues || [], v => v == null ? "null" : v.toString());
|
|
499
|
+
await q.getAndSendList(after, e => (e.referenceValues || []).map(r => asRef(r)), t => Type.signature(t));
|
|
500
|
+
},
|
|
501
|
+
async rpcReceive(before: Type.Annotation.ArrayElementValue | undefined, q: RpcReceiveQueue): Promise<Type.Annotation.ArrayElementValue> {
|
|
502
|
+
if (!before) {
|
|
503
|
+
return {
|
|
504
|
+
kind: Type.Kind.ArrayElementValue,
|
|
505
|
+
element: (await q.receive(undefined) as unknown) as Type,
|
|
506
|
+
constantValues: await q.receiveList(undefined),
|
|
507
|
+
referenceValues: await q.receiveList(undefined)
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
// Mutate the before object in place to preserve reference identity
|
|
511
|
+
before.element = await q.receive(before.element);
|
|
512
|
+
before.constantValues = await q.receiveList(before.constantValues);
|
|
513
|
+
before.referenceValues = await q.receiveList(before.referenceValues);
|
|
514
|
+
return before;
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
RpcCodecs.registerCodec(Type.Kind.Method, {
|
|
519
|
+
async rpcSend(after: Type.Method, q: RpcSendQueue): Promise<void> {
|
|
520
|
+
await q.getAndSend(after, m => asRef(m.declaringType));
|
|
521
|
+
await q.getAndSend(after, m => m.name);
|
|
522
|
+
await q.getAndSend(after, m => asRef(m.returnType));
|
|
523
|
+
await q.getAndSendList(after, m => m.parameterNames || [], v => v);
|
|
524
|
+
await q.getAndSendList(after, m => (m.parameterTypes || []).map(t => asRef(t)), t => Type.signature(t));
|
|
525
|
+
await q.getAndSendList(after, m => (m.thrownExceptions || []).map(t => asRef(t)), t => Type.signature(t));
|
|
526
|
+
await q.getAndSendList(after, m => (m.annotations || []).map(a => asRef(a)), t => Type.signature(t));
|
|
527
|
+
await q.getAndSendList(after, m => m.defaultValue || undefined, v => v);
|
|
528
|
+
await q.getAndSendList(after, m => m.declaredFormalTypeNames || [], v => v);
|
|
529
|
+
},
|
|
530
|
+
async rpcReceive(before: Type.Method, q: RpcReceiveQueue): Promise<Type.Method> {
|
|
531
|
+
// Mutate the before object in place to preserve reference identity
|
|
532
|
+
before.declaringType = await q.receive(before.declaringType);
|
|
533
|
+
before.name = await q.receive(before.name);
|
|
534
|
+
before.returnType = await q.receive(before.returnType);
|
|
535
|
+
before.parameterNames = await q.receiveList(before.parameterNames) || [];
|
|
536
|
+
before.parameterTypes = await q.receiveList(before.parameterTypes) || [];
|
|
537
|
+
before.thrownExceptions = await q.receiveList(before.thrownExceptions) || [];
|
|
538
|
+
before.annotations = await q.receiveList(before.annotations) || [];
|
|
539
|
+
before.defaultValue = await q.receiveList(before.defaultValue);
|
|
540
|
+
before.declaredFormalTypeNames = await q.receiveList(before.declaredFormalTypeNames) || [];
|
|
541
|
+
return before;
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
RpcCodecs.registerCodec(Type.Kind.Array, {
|
|
546
|
+
async rpcSend(after: Type.Array, q: RpcSendQueue): Promise<void> {
|
|
547
|
+
await q.getAndSend(after, a => asRef(a.elemType));
|
|
548
|
+
await q.getAndSendList(after, a => (a.annotations || []).map(ann => asRef(ann)), t => Type.signature(t));
|
|
549
|
+
},
|
|
550
|
+
async rpcReceive(before: Type.Array, q: RpcReceiveQueue): Promise<Type.Array> {
|
|
551
|
+
// Mutate the before object in place to preserve reference identity
|
|
552
|
+
before.elemType = await q.receive(before.elemType);
|
|
553
|
+
before.annotations = await q.receiveList(before.annotations) || [];
|
|
554
|
+
return before;
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
RpcCodecs.registerCodec(Type.Kind.Parameterized, {
|
|
559
|
+
async rpcSend(after: Type.Parameterized, q: RpcSendQueue): Promise<void> {
|
|
560
|
+
await q.getAndSend(after, p => asRef(p.type));
|
|
561
|
+
await q.getAndSendList(after, p => (p.typeParameters || []).map(t => asRef(t)), t => Type.signature(t));
|
|
562
|
+
},
|
|
563
|
+
async rpcReceive(before: Type.Parameterized, q: RpcReceiveQueue): Promise<Type.Parameterized> {
|
|
564
|
+
// Mutate the before object in place to preserve reference identity
|
|
565
|
+
before.type = await q.receive(before.type);
|
|
566
|
+
before.typeParameters = await q.receiveList(before.typeParameters) || [];
|
|
567
|
+
return before;
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
RpcCodecs.registerCodec(Type.Kind.GenericTypeVariable, {
|
|
572
|
+
async rpcSend(after: Type.GenericTypeVariable, q: RpcSendQueue): Promise<void> {
|
|
573
|
+
await q.getAndSend(after, g => g.name);
|
|
574
|
+
// Convert TypeScript enum to Java enum string
|
|
575
|
+
await q.getAndSend(after, g => {
|
|
576
|
+
switch (g.variance) {
|
|
577
|
+
case Type.GenericTypeVariable.Variance.Covariant:
|
|
578
|
+
return 'COVARIANT';
|
|
579
|
+
case Type.GenericTypeVariable.Variance.Contravariant:
|
|
580
|
+
return 'CONTRAVARIANT';
|
|
581
|
+
case Type.GenericTypeVariable.Variance.Invariant:
|
|
582
|
+
default:
|
|
583
|
+
return 'INVARIANT';
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
await q.getAndSendList(after, g => (g.bounds || []).map(b => asRef(b)), t => Type.signature(t));
|
|
587
|
+
},
|
|
588
|
+
async rpcReceive(before: Type.GenericTypeVariable, q: RpcReceiveQueue): Promise<Type.GenericTypeVariable> {
|
|
589
|
+
// Mutate the before object in place to preserve reference identity
|
|
590
|
+
before.name = await q.receive(before.name);
|
|
591
|
+
const varianceStr = await q.receive(before.variance) as any as string;
|
|
592
|
+
// Convert Java enum string to TypeScript enum
|
|
593
|
+
switch (varianceStr) {
|
|
594
|
+
case 'COVARIANT':
|
|
595
|
+
before.variance = Type.GenericTypeVariable.Variance.Covariant;
|
|
596
|
+
break;
|
|
597
|
+
case 'CONTRAVARIANT':
|
|
598
|
+
before.variance = Type.GenericTypeVariable.Variance.Contravariant;
|
|
599
|
+
break;
|
|
600
|
+
case 'INVARIANT':
|
|
601
|
+
default:
|
|
602
|
+
before.variance = Type.GenericTypeVariable.Variance.Invariant;
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
before.bounds = await q.receiveList(before.bounds) || [];
|
|
606
|
+
return before;
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
RpcCodecs.registerCodec(Type.Kind.Union, {
|
|
611
|
+
async rpcSend(after: Type.Union, q: RpcSendQueue): Promise<void> {
|
|
612
|
+
await q.getAndSendList(after, u => (u.bounds || []).map(b => asRef(b)), t => Type.signature(t));
|
|
613
|
+
},
|
|
614
|
+
async rpcReceive(before: Type.Union, q: RpcReceiveQueue): Promise<Type.Union> {
|
|
615
|
+
// Mutate the before object in place to preserve reference identity
|
|
616
|
+
before.bounds = await q.receiveList(before.bounds) || [];
|
|
617
|
+
return before;
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
RpcCodecs.registerCodec(Type.Kind.Intersection, {
|
|
622
|
+
async rpcSend(after: Type.Intersection, q: RpcSendQueue): Promise<void> {
|
|
623
|
+
await q.getAndSendList(after, i => (i.bounds || []).map(b => asRef(b)), t => Type.signature(t));
|
|
624
|
+
},
|
|
625
|
+
async rpcReceive(before: Type.Intersection, q: RpcReceiveQueue): Promise<Type.Intersection> {
|
|
626
|
+
// Mutate the before object in place to preserve reference identity
|
|
627
|
+
before.bounds = await q.receiveList(before.bounds) || [];
|
|
628
|
+
return before;
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
RpcCodecs.registerCodec(Type.Kind.ShallowClass, {
|
|
633
|
+
async rpcSend(after: Type.ShallowClass, q: RpcSendQueue): Promise<void> {
|
|
634
|
+
await q.getAndSend(after, c => c.fullyQualifiedName);
|
|
635
|
+
await q.getAndSend(after, c => asRef(c.owningClass));
|
|
636
|
+
},
|
|
637
|
+
async rpcReceive(before: Type.ShallowClass, q: RpcReceiveQueue): Promise<Type.ShallowClass> {
|
|
638
|
+
before.classKind = Type.Class.Kind.Class;
|
|
639
|
+
before.fullyQualifiedName = await q.receive(before.fullyQualifiedName);
|
|
640
|
+
before.owningClass = await q.receive(before.owningClass);
|
|
641
|
+
return before;
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
|
|
645
|
+
RpcCodecs.registerCodec(Type.Kind.Unknown, {
|
|
646
|
+
async rpcSend(_after: Type, _q: RpcSendQueue): Promise<void> {
|
|
647
|
+
// Unknown type has no additional data
|
|
648
|
+
},
|
|
649
|
+
async rpcReceive(_before: Type, _q: RpcReceiveQueue): Promise<Type> {
|
|
650
|
+
return Type.unknownType;
|
|
651
|
+
}
|
|
652
|
+
});
|