openrewrite-remote 0.13.4__py3-none-any.whl → 0.14.0__py3-none-any.whl
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.
- {openrewrite_remote-0.13.4.dist-info → openrewrite_remote-0.14.0.dist-info}/METADATA +1 -1
- openrewrite_remote-0.14.0.dist-info/RECORD +24 -0
- {openrewrite_remote-0.13.4.dist-info → openrewrite_remote-0.14.0.dist-info}/WHEEL +1 -1
- rewrite_remote/__init__.py +1 -3
- rewrite_remote/handlers/handler_helpers.py +1 -1
- rewrite_remote/handlers/hello_world_handler.py +1 -2
- rewrite_remote/handlers/parse_project_sources_handler.py +95 -0
- rewrite_remote/handlers/project_helper.py +58 -14
- rewrite_remote/handlers/pypi_manager.py +13 -16
- rewrite_remote/handlers/recipe_install_handler.py +1 -3
- rewrite_remote/handlers/run_recipe_load_and_visitor_handler.py +3 -7
- rewrite_remote/receiver.py +54 -38
- rewrite_remote/remote_utils.py +21 -15
- rewrite_remote/remoting.py +17 -12
- rewrite_remote/sender.py +75 -118
- rewrite_remote/server.py +28 -22
- rewrite_remote/type_utils.py +6 -2
- openrewrite_remote-0.13.4.dist-info/RECORD +0 -23
- {openrewrite_remote-0.13.4.dist-info → openrewrite_remote-0.14.0.dist-info}/entry_points.txt +0 -0
- {openrewrite_remote-0.13.4.dist-info → openrewrite_remote-0.14.0.dist-info}/top_level.txt +0 -0
rewrite_remote/remote_utils.py
CHANGED
@@ -57,9 +57,7 @@ def receive_nodes(
|
|
57
57
|
elif diff_event.event_type == EventType.NoChange:
|
58
58
|
after[i] = None # Or some default value
|
59
59
|
else:
|
60
|
-
raise NotImplementedError(
|
61
|
-
f"Unexpected operation: {diff_event.event_type}"
|
62
|
-
)
|
60
|
+
raise NotImplementedError(f"Unexpected operation: {diff_event.event_type}")
|
63
61
|
return after # type: ignore
|
64
62
|
elif list_event.event_type == EventType.Update:
|
65
63
|
return _receive_updated_nodes(before, list_event.msg, details, ctx) # type: ignore
|
@@ -85,7 +83,11 @@ def _receive_updated_nodes(
|
|
85
83
|
if evt.event_type in (EventType.NoChange, EventType.EndList):
|
86
84
|
break
|
87
85
|
|
88
|
-
if evt.event_type in (
|
86
|
+
if evt.event_type in (
|
87
|
+
EventType.Delete,
|
88
|
+
EventType.Update,
|
89
|
+
EventType.Add,
|
90
|
+
):
|
89
91
|
if not modified:
|
90
92
|
after_list = _copy_range(before, before_idx)
|
91
93
|
modified = True
|
@@ -97,9 +99,7 @@ def _receive_updated_nodes(
|
|
97
99
|
elif evt.event_type == EventType.Delete:
|
98
100
|
before_idx += 1
|
99
101
|
elif evt.event_type == EventType.Update:
|
100
|
-
after_list.append(
|
101
|
-
details.receive_details(before[before_idx], evt.concrete_type, ctx)
|
102
|
-
)
|
102
|
+
after_list.append(details.receive_details(before[before_idx], evt.concrete_type, ctx))
|
103
103
|
before_idx += 1
|
104
104
|
elif evt.event_type == EventType.Add:
|
105
105
|
after_list.append(details.receive_details(None, evt.concrete_type, ctx))
|
@@ -130,9 +130,7 @@ def receive_values(
|
|
130
130
|
elif diff_event.event_type == EventType.NoChange:
|
131
131
|
after[i] = None # Or some default value
|
132
132
|
else:
|
133
|
-
raise NotImplementedError(
|
134
|
-
f"Unexpected operation: {diff_event.event_type}"
|
135
|
-
)
|
133
|
+
raise NotImplementedError(f"Unexpected operation: {diff_event.event_type}")
|
136
134
|
return after # type: ignore
|
137
135
|
elif list_event.event_type == EventType.Update:
|
138
136
|
return _receive_updated_values(before, list_event.msg, type, ctx) # type: ignore
|
@@ -155,7 +153,11 @@ def _receive_updated_values(
|
|
155
153
|
if evt.event_type in (EventType.NoChange, EventType.EndList):
|
156
154
|
break
|
157
155
|
|
158
|
-
if evt.event_type in (
|
156
|
+
if evt.event_type in (
|
157
|
+
EventType.Delete,
|
158
|
+
EventType.Update,
|
159
|
+
EventType.Add,
|
160
|
+
):
|
159
161
|
if not modified:
|
160
162
|
after_list = _copy_range(before, before_idx)
|
161
163
|
modified = True
|
@@ -239,16 +241,20 @@ def calculate_list_diff(
|
|
239
241
|
|
240
242
|
# If elements at current indices are not equal, figure out the operation
|
241
243
|
if before_id not in after_map:
|
242
|
-
consumer(
|
244
|
+
consumer(
|
245
|
+
Operation.Delete,
|
246
|
+
before_idx,
|
247
|
+
-1,
|
248
|
+
before[before_idx],
|
249
|
+
None,
|
250
|
+
)
|
243
251
|
before_idx += 1
|
244
252
|
else:
|
245
253
|
consumer(Operation.Add, -1, after_idx, None, after[after_idx])
|
246
254
|
after_idx += 1
|
247
255
|
|
248
256
|
|
249
|
-
def create_index_map(
|
250
|
-
lst: List[T], from_index: int, id_function: Callable[[T], I]
|
251
|
-
) -> Dict[I, int]:
|
257
|
+
def create_index_map(lst: List[T], from_index: int, id_function: Callable[[T], I]) -> Dict[I, int]:
|
252
258
|
result = {}
|
253
259
|
for i in range(from_index, len(lst)):
|
254
260
|
result[id_function(lst[i])] = i
|
rewrite_remote/remoting.py
CHANGED
@@ -12,8 +12,6 @@ from typing import (
|
|
12
12
|
Dict,
|
13
13
|
Optional,
|
14
14
|
Type,
|
15
|
-
List,
|
16
|
-
Tuple,
|
17
15
|
Callable,
|
18
16
|
cast,
|
19
17
|
Union,
|
@@ -108,14 +106,16 @@ class RemotingContext:
|
|
108
106
|
def new_sender_context(self, output_stream: Any) -> "SenderContext":
|
109
107
|
return SenderContext(
|
110
108
|
JsonSender(
|
111
|
-
output_stream,
|
109
|
+
output_stream,
|
110
|
+
SerializationContext(self, self._value_serializers),
|
112
111
|
)
|
113
112
|
)
|
114
113
|
|
115
114
|
def new_receiver_context(self, input_stream: Any) -> "ReceiverContext":
|
116
115
|
return ReceiverContext(
|
117
116
|
JsonReceiver(
|
118
|
-
input_stream,
|
117
|
+
input_stream,
|
118
|
+
DeserializationContext(self, self._value_deserializers),
|
119
119
|
)
|
120
120
|
)
|
121
121
|
|
@@ -160,7 +160,6 @@ ERROR = 1
|
|
160
160
|
|
161
161
|
|
162
162
|
class RemotingMessenger:
|
163
|
-
|
164
163
|
def __init__(
|
165
164
|
self,
|
166
165
|
context: RemotingContext,
|
@@ -249,9 +248,7 @@ class RemotingMessenger:
|
|
249
248
|
root_cursor = Cursor(None, Cursor.ROOT_VALUE)
|
250
249
|
ctx = InMemoryExecutionContext()
|
251
250
|
RemotingExecutionContextView.view(ctx).remoting_context = self._context
|
252
|
-
print_output = received.print(
|
253
|
-
Cursor(root_cursor, received), PrintOutputCapture(0)
|
254
|
-
)
|
251
|
+
print_output = received.print(Cursor(root_cursor, received), PrintOutputCapture(0))
|
255
252
|
|
256
253
|
response_stream = BytesIO()
|
257
254
|
cbor2.dump(RemotingMessageType.Response, response_stream)
|
@@ -280,7 +277,9 @@ class RemotingMessenger:
|
|
280
277
|
|
281
278
|
def send_print_request(self, sock: socket.socket, cursor: Cursor):
|
282
279
|
self.__send_request_stream(
|
283
|
-
sock,
|
280
|
+
sock,
|
281
|
+
"print",
|
282
|
+
lambda s: self.send_tree(s, cast(Tree, cursor.value)),
|
284
283
|
)
|
285
284
|
if self.recv_byte(sock) != RemotingMessageType.Response:
|
286
285
|
raise ValueError("Unexpected message type.")
|
@@ -293,16 +292,22 @@ class RemotingMessenger:
|
|
293
292
|
|
294
293
|
def send_tree(
|
295
294
|
self,
|
296
|
-
|
295
|
+
dest: Union[BinaryIO, socket.socket],
|
297
296
|
after: Tree,
|
298
297
|
before: Optional[Tree] = None,
|
299
298
|
):
|
300
299
|
b = BytesIO()
|
301
300
|
self._context.new_sender_context(b).send_any_tree(after, before)
|
302
|
-
|
301
|
+
if isinstance(dest, socket.socket):
|
302
|
+
dest.sendall(dumps(b.getvalue()))
|
303
|
+
else:
|
304
|
+
b.seek(0)
|
305
|
+
dest.write(dumps(b.getvalue()))
|
303
306
|
|
304
307
|
def receive_tree(
|
305
|
-
self,
|
308
|
+
self,
|
309
|
+
data: Union[BinaryIO, socket.socket],
|
310
|
+
before: Optional[Tree] = None,
|
306
311
|
):
|
307
312
|
receiver_context = self._context.new_receiver_context(BytesIO(cbor2.load(data)))
|
308
313
|
return receiver_context.receive_any_tree(before)
|
rewrite_remote/sender.py
CHANGED
@@ -21,7 +21,6 @@ import cbor2
|
|
21
21
|
from cbor2 import CBOREncoder
|
22
22
|
from rewrite import Tree, Markers, Marker, ParseErrorVisitor, Cursor, Style
|
23
23
|
from rewrite.visitor import TreeVisitor
|
24
|
-
from rewrite.java import JavaType
|
25
24
|
|
26
25
|
from rewrite_remote import remote_utils
|
27
26
|
from rewrite_remote.event import *
|
@@ -52,9 +51,7 @@ class OmniSender(Sender):
|
|
52
51
|
|
53
52
|
|
54
53
|
class TreeSender(Protocol):
|
55
|
-
def send_node(
|
56
|
-
self, diff_event: DiffEvent, visitor: Callable[["TreeSender"], None]
|
57
|
-
) -> None: ...
|
54
|
+
def send_node(self, diff_event: DiffEvent, visitor: Callable[["TreeSender"], None]) -> None: ...
|
58
55
|
|
59
56
|
def send_value(self, diff_event: DiffEvent) -> None: ...
|
60
57
|
|
@@ -69,10 +66,10 @@ class SenderContext(Generic[T]):
|
|
69
66
|
Registry: Dict[Type[Any], Callable[[], Sender]] = {}
|
70
67
|
|
71
68
|
def __init__(
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
self,
|
70
|
+
sender: "TreeSender",
|
71
|
+
visitor: TreeVisitor = None,
|
72
|
+
before: Optional[Any] = None,
|
76
73
|
):
|
77
74
|
self.sender = sender
|
78
75
|
self.visitor = visitor
|
@@ -82,24 +79,20 @@ class SenderContext(Generic[T]):
|
|
82
79
|
for entry_type, factory in self.Registry.items():
|
83
80
|
# FIXME find better solution
|
84
81
|
try:
|
85
|
-
if type_.__bases__.__contains__(entry_type) or issubclass(
|
86
|
-
type_, entry_type
|
87
|
-
):
|
82
|
+
if type_.__bases__.__contains__(entry_type) or issubclass(type_, entry_type):
|
88
83
|
return factory()
|
89
84
|
except:
|
90
85
|
pass
|
91
86
|
raise ValueError(f"Unsupported sender type: {type_}")
|
92
87
|
|
93
|
-
def fork(
|
94
|
-
self, visitor: TreeVisitor, before: Optional[Any] = None
|
95
|
-
) -> "SenderContext[T]":
|
88
|
+
def fork(self, visitor: TreeVisitor, before: Optional[Any] = None) -> "SenderContext[T]":
|
96
89
|
return SenderContext(self.sender, visitor, before)
|
97
90
|
|
98
91
|
def visit(
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
92
|
+
self,
|
93
|
+
consumer: Callable[[V, "SenderContext"], None],
|
94
|
+
after: V,
|
95
|
+
before: Optional[V] = None,
|
103
96
|
) -> None:
|
104
97
|
save_before = self.before
|
105
98
|
self.before = before
|
@@ -113,10 +106,10 @@ class SenderContext(Generic[T]):
|
|
113
106
|
OmniSender().send(after, before, self)
|
114
107
|
|
115
108
|
def send_node(
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
109
|
+
self,
|
110
|
+
owner: A,
|
111
|
+
extractor: Callable[[A], Optional[V]],
|
112
|
+
details: Callable[[V, "SenderContext[T]"], None],
|
120
113
|
) -> None:
|
121
114
|
self.send_node_internal(
|
122
115
|
extractor(owner),
|
@@ -124,9 +117,7 @@ class SenderContext(Generic[T]):
|
|
124
117
|
details,
|
125
118
|
)
|
126
119
|
|
127
|
-
def send_value(
|
128
|
-
self, owner: Any, value_extractor: Callable[[T], Optional[V]]
|
129
|
-
) -> None:
|
120
|
+
def send_value(self, owner: Any, value_extractor: Callable[[T], Optional[V]]) -> None:
|
130
121
|
after_value = value_extractor(owner)
|
131
122
|
before_value = value_extractor(self.before) if self.before is not None else None
|
132
123
|
self.send_value_internal(after_value, before_value)
|
@@ -136,9 +127,7 @@ class SenderContext(Generic[T]):
|
|
136
127
|
before_value = value_extractor(self.before) if self.before is not None else None
|
137
128
|
self.send_typed_value_internal(after_value, before_value)
|
138
129
|
|
139
|
-
def send_list_event(
|
140
|
-
self, after: Optional[List[V]], before: Optional[List[V]]
|
141
|
-
) -> bool:
|
130
|
+
def send_list_event(self, after: Optional[List[V]], before: Optional[List[V]]) -> bool:
|
142
131
|
if after == before:
|
143
132
|
evt = DiffEvent(EventType.NoChange, None, None)
|
144
133
|
elif before is None:
|
@@ -149,21 +138,17 @@ class SenderContext(Generic[T]):
|
|
149
138
|
evt = DiffEvent(EventType.Update, None, len(after))
|
150
139
|
|
151
140
|
self.sender.send_value(evt)
|
152
|
-
return
|
153
|
-
evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
|
154
|
-
)
|
141
|
+
return evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
|
155
142
|
|
156
143
|
def send_nodes(
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
144
|
+
self,
|
145
|
+
owner: A,
|
146
|
+
element_extractor: Callable[[A], List[V]],
|
147
|
+
details: Callable[[V, "SenderContext"], None],
|
148
|
+
id_function: Callable[[V], I],
|
162
149
|
) -> None:
|
163
150
|
after_list = element_extractor(owner)
|
164
|
-
before_list = (
|
165
|
-
element_extractor(self.before) if self.before is not None else None
|
166
|
-
)
|
151
|
+
before_list = element_extractor(self.before) if self.before is not None else None
|
167
152
|
|
168
153
|
if self.send_list_event(after_list, before_list):
|
169
154
|
if before_list is not None:
|
@@ -175,14 +160,10 @@ class SenderContext(Generic[T]):
|
|
175
160
|
id_function,
|
176
161
|
lambda op, _1, _2, bv, av: {
|
177
162
|
Operation.Delete: lambda: self.send_node_internal(av, bv, details),
|
178
|
-
Operation.NoChange: lambda: self.send_node_internal(
|
179
|
-
av, bv, details
|
180
|
-
),
|
163
|
+
Operation.NoChange: lambda: self.send_node_internal(av, bv, details),
|
181
164
|
Operation.Add: lambda: self.send_node_internal(av, bv, details),
|
182
165
|
Operation.Update: lambda: self.send_node_internal(av, bv, details),
|
183
|
-
Operation.Move: lambda: NotImplementedError(
|
184
|
-
"Unexpected operation: " + str(op)
|
185
|
-
),
|
166
|
+
Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op)),
|
186
167
|
}[op](),
|
187
168
|
)
|
188
169
|
|
@@ -190,10 +171,10 @@ class SenderContext(Generic[T]):
|
|
190
171
|
self.sender.send_value(DiffEvent(EventType.EndList, None, None))
|
191
172
|
|
192
173
|
def send_values(
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
174
|
+
self,
|
175
|
+
owner: T,
|
176
|
+
value_extractor: Callable[[T], List[V]],
|
177
|
+
id_function: Callable[[V], I],
|
197
178
|
) -> None:
|
198
179
|
after_list = value_extractor(owner)
|
199
180
|
before_list = value_extractor(self.before) if self.before is not None else None
|
@@ -211,9 +192,7 @@ class SenderContext(Generic[T]):
|
|
211
192
|
Operation.NoChange: lambda: self.send_value_internal(av, bv),
|
212
193
|
Operation.Add: lambda: self.send_value_internal(av, bv),
|
213
194
|
Operation.Update: lambda: self.send_value_internal(av, bv),
|
214
|
-
Operation.Move: lambda: NotImplementedError(
|
215
|
-
"Unexpected operation: " + str(op)
|
216
|
-
),
|
195
|
+
Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op)),
|
217
196
|
}[op](),
|
218
197
|
)
|
219
198
|
|
@@ -221,10 +200,10 @@ class SenderContext(Generic[T]):
|
|
221
200
|
self.sender.send_value(DiffEvent(EventType.EndList, None, None))
|
222
201
|
|
223
202
|
def send_typed_values(
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
203
|
+
self,
|
204
|
+
owner: T,
|
205
|
+
value_extractor: Callable[[T], List[V]],
|
206
|
+
id_function: Callable[[V], I],
|
228
207
|
) -> None:
|
229
208
|
after_list = value_extractor(owner)
|
230
209
|
before_list = value_extractor(self.before) if self.before is not None else None
|
@@ -242,9 +221,7 @@ class SenderContext(Generic[T]):
|
|
242
221
|
Operation.NoChange: lambda: self.send_typed_value_internal(av, bv),
|
243
222
|
Operation.Add: lambda: self.send_typed_value_internal(av, bv),
|
244
223
|
Operation.Update: lambda: self.send_typed_value_internal(av, bv),
|
245
|
-
Operation.Move: lambda: NotImplementedError(
|
246
|
-
"Unexpected operation: " + str(op)
|
247
|
-
),
|
224
|
+
Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op)),
|
248
225
|
}[op](),
|
249
226
|
)
|
250
227
|
|
@@ -270,17 +247,15 @@ class SenderContext(Generic[T]):
|
|
270
247
|
return isinstance(after, (Tree, Markers)) or isinstance(before, (Tree, Markers))
|
271
248
|
|
272
249
|
def send_node_internal(
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
250
|
+
self,
|
251
|
+
after: Optional[V],
|
252
|
+
before: Optional[V],
|
253
|
+
details: Callable[[V, "SenderContext"], None],
|
277
254
|
) -> None:
|
278
255
|
if self.are_equal(after, before):
|
279
256
|
evt = DiffEvent(EventType.NoChange, None, None)
|
280
257
|
elif before is None:
|
281
|
-
concrete_type = (
|
282
|
-
to_java_type_name(type(after)) if after is not None else None
|
283
|
-
)
|
258
|
+
concrete_type = to_java_type_name(type(after)) if after is not None else None
|
284
259
|
evt = DiffEvent(EventType.Add, concrete_type, None)
|
285
260
|
elif after is None:
|
286
261
|
evt = DiffEvent(EventType.Delete, None, None)
|
@@ -293,9 +268,7 @@ class SenderContext(Generic[T]):
|
|
293
268
|
if self.before is not None and self.are_equal(after, before):
|
294
269
|
evt = DiffEvent(EventType.NoChange, None, None)
|
295
270
|
elif self.before is None or before is None:
|
296
|
-
concrete_type = (
|
297
|
-
to_java_type_name(type(after)) if isinstance(after, Marker) else None
|
298
|
-
)
|
271
|
+
concrete_type = to_java_type_name(type(after)) if isinstance(after, Marker) else None
|
299
272
|
evt = DiffEvent(EventType.Add, concrete_type, after)
|
300
273
|
elif after is None:
|
301
274
|
evt = DiffEvent(EventType.Delete, None, None)
|
@@ -308,9 +281,7 @@ class SenderContext(Generic[T]):
|
|
308
281
|
if self.before is not None and self.are_equal(after, before):
|
309
282
|
evt = DiffEvent(EventType.NoChange, None, None)
|
310
283
|
elif self.before is None or before is None:
|
311
|
-
concrete_type = (
|
312
|
-
to_java_type_name_from_value(after) if after is not None else None
|
313
|
-
)
|
284
|
+
concrete_type = to_java_type_name_from_value(after) if after is not None else None
|
314
285
|
evt = DiffEvent(EventType.Add, concrete_type, after)
|
315
286
|
elif after is None:
|
316
287
|
evt = DiffEvent(EventType.Delete, None, None)
|
@@ -322,23 +293,21 @@ class SenderContext(Generic[T]):
|
|
322
293
|
|
323
294
|
class SerializationContext:
|
324
295
|
def __init__(
|
325
|
-
|
326
|
-
|
327
|
-
|
296
|
+
self,
|
297
|
+
remoting_context: "RemotingContext",
|
298
|
+
value_serializers: Optional[Dict[Type[Any], "ValueSerializer"]] = None,
|
328
299
|
):
|
329
300
|
self.remoting_context = remoting_context
|
330
301
|
self.value_serializers = value_serializers or {}
|
331
302
|
|
332
|
-
def serialize(
|
333
|
-
self, value: Any, type_name: Optional[str], encoder: CBOREncoder
|
334
|
-
) -> None:
|
303
|
+
def serialize(self, value: Any, type_name: Optional[str], encoder: CBOREncoder) -> None:
|
335
304
|
if value is None:
|
336
305
|
encoder.encode_none(None)
|
337
306
|
return
|
338
307
|
|
339
308
|
for type_cls, serializer in self.value_serializers.items():
|
340
309
|
if isinstance(value, type_cls):
|
341
|
-
serializer
|
310
|
+
serializer(value, type_name, encoder, self)
|
342
311
|
return
|
343
312
|
|
344
313
|
DefaultValueSerializer().serialize(value, type_name, encoder, self)
|
@@ -353,7 +322,6 @@ class JsonSender(TreeSender):
|
|
353
322
|
self._encoder = cbor2.CBOREncoder(self._stream)
|
354
323
|
|
355
324
|
def send_node(self, diff_event, visitor) -> None:
|
356
|
-
|
357
325
|
if diff_event.event_type in (EventType.Add, EventType.Update):
|
358
326
|
self._encoder.encode(
|
359
327
|
[diff_event.event_type.value]
|
@@ -375,20 +343,16 @@ class JsonSender(TreeSender):
|
|
375
343
|
|
376
344
|
def send_value(self, diff_event):
|
377
345
|
if diff_event.event_type in (EventType.Add, EventType.Update):
|
378
|
-
self._encoder.encode_length(
|
379
|
-
4, 3 if diff_event.concrete_type is not None else 2
|
380
|
-
)
|
346
|
+
self._encoder.encode_length(4, 3 if diff_event.concrete_type is not None else 2)
|
381
347
|
self._encoder.encode_int(diff_event.event_type.value)
|
382
348
|
if diff_event.concrete_type is not None:
|
383
349
|
self._encoder.encode(diff_event.concrete_type)
|
384
|
-
self._context.serialize(
|
385
|
-
diff_event.msg, diff_event.concrete_type, self._encoder
|
386
|
-
)
|
350
|
+
self._context.serialize(diff_event.msg, diff_event.concrete_type, self._encoder)
|
387
351
|
elif diff_event.event_type in (
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
352
|
+
EventType.Delete,
|
353
|
+
EventType.NoChange,
|
354
|
+
EventType.StartList,
|
355
|
+
EventType.EndList,
|
392
356
|
):
|
393
357
|
self._encoder.encode([diff_event.event_type.value])
|
394
358
|
else:
|
@@ -409,11 +373,11 @@ ValueSerializer = Callable[[Any, Optional[str], CBOREncoder, SerializationContex
|
|
409
373
|
|
410
374
|
|
411
375
|
def write_object_using_reflection(
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
376
|
+
value: Any,
|
377
|
+
type_name: Optional[str],
|
378
|
+
with_id: bool,
|
379
|
+
encoder: CBOREncoder,
|
380
|
+
context: SerializationContext,
|
417
381
|
) -> None:
|
418
382
|
if with_id and (id := context.remoting_context.try_get_id(value)):
|
419
383
|
encoder.encode_int(id)
|
@@ -429,8 +393,7 @@ def write_object_using_reflection(
|
|
429
393
|
|
430
394
|
for field in fields(value):
|
431
395
|
if field.name[0] == "_" and (
|
432
|
-
|
433
|
-
or field.type.__origin__ is not ClassVar
|
396
|
+
not hasattr(field.type, "__origin__") or field.type.__origin__ is not ClassVar
|
434
397
|
):
|
435
398
|
encoder.encode_string(to_java_field_name(field))
|
436
399
|
context.serialize(getattr(value, field.name), None, encoder)
|
@@ -442,11 +405,11 @@ class DefaultValueSerializer(ValueSerializer):
|
|
442
405
|
return self.serialize(*args, **kwargs)
|
443
406
|
|
444
407
|
def serialize(
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
408
|
+
self,
|
409
|
+
value: Any,
|
410
|
+
type_name: Optional[str],
|
411
|
+
encoder: CBOREncoder,
|
412
|
+
context: SerializationContext,
|
450
413
|
) -> None:
|
451
414
|
if isinstance(value, (int, float, str, bool, decimal.Decimal)):
|
452
415
|
encoder.encode(value)
|
@@ -455,11 +418,7 @@ class DefaultValueSerializer(ValueSerializer):
|
|
455
418
|
elif isinstance(value, UUID):
|
456
419
|
encoder.encode(value.bytes)
|
457
420
|
elif isinstance(value, Enum):
|
458
|
-
|
459
|
-
# FIXME implement type attribution support
|
460
|
-
encoder.encode(["org.openrewrite.java.tree.JavaType$Primitive", value.value])
|
461
|
-
else:
|
462
|
-
encoder.encode(value.value)
|
421
|
+
encoder.encode(value.value)
|
463
422
|
elif isinstance(value, Path):
|
464
423
|
encoder.encode(str(value))
|
465
424
|
elif isinstance(value, (list, set, tuple)):
|
@@ -492,8 +451,8 @@ class DefaultValueSerializer(ValueSerializer):
|
|
492
451
|
encoder.encode_int(id)
|
493
452
|
for field in fields(value):
|
494
453
|
if field.name[0] == "_" and (
|
495
|
-
|
496
|
-
|
454
|
+
not hasattr(field.type, "__origin__")
|
455
|
+
or field.type.__origin__ is not ClassVar
|
497
456
|
):
|
498
457
|
encoder.encode_string(to_java_field_name(field))
|
499
458
|
context.serialize(getattr(value, field.name), None, encoder)
|
@@ -504,21 +463,19 @@ class DefaultValueSerializer(ValueSerializer):
|
|
504
463
|
elif isinstance(value, complex):
|
505
464
|
encoder.encode(str(value))
|
506
465
|
else:
|
507
|
-
write_object_using_reflection(
|
508
|
-
value, type_name, False, encoder, context
|
509
|
-
)
|
466
|
+
write_object_using_reflection(value, type_name, False, encoder, context)
|
510
467
|
|
511
468
|
|
512
469
|
def delegate_based_serializer(
|
513
|
-
|
470
|
+
delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None],
|
514
471
|
) -> Type[ValueSerializer]:
|
515
472
|
class DelegateBasedSerializer(ValueSerializer):
|
516
473
|
def serialize(
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
474
|
+
self,
|
475
|
+
value: Any,
|
476
|
+
type_name: Optional[str],
|
477
|
+
encoder: CBOREncoder,
|
478
|
+
context: SerializationContext,
|
522
479
|
) -> None:
|
523
480
|
delegate(value, type_name, encoder, context)
|
524
481
|
|