Skip to content

Commit 00d8a02

Browse files
authored
[macros] Batch augmentations. (#3859)
1 parent bca0682 commit 00d8a02

File tree

8 files changed

+51
-39
lines changed

8 files changed

+51
-39
lines changed

working/macros/dart_model/macro_client/lib/socket_host.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ class SocketHost implements Service, Host {
5656
Service get service => this;
5757

5858
@override
59-
Future<void> augment(
60-
{required QualifiedName macro,
61-
required String uri,
62-
required String augmentation}) async {
59+
Future<void> augment({
60+
required QualifiedName macro,
61+
required Map<String, String> augmentationsByUri,
62+
}) async {
6363
socket.writeln(json.encode(
64-
AugmentRequest(macro: macro, uri: uri, augmentation: augmentation)));
64+
AugmentRequest(macro: macro, augmentationsByUri: augmentationsByUri)));
6565
}
6666
}

working/macros/dart_model/macro_host/lib/macro_host.dart

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class MacroHost implements Host {
1616
final Service service;
1717
final File? Function(Uri) uriConverter;
1818
ServerSocket? serverSocket;
19-
final Map<String, Map<Object, String>> _augmentationsByUri = {};
19+
final Map<String, Map<QualifiedName, String>> _augmentationsByMacroByUri = {};
2020
final Set<String> _augmentationsToWrite = {};
2121

2222
int _augmentationCounter = 0;
@@ -36,17 +36,22 @@ class MacroHost implements Host {
3636
}
3737

3838
@override
39-
Future<void> augment(
40-
{required QualifiedName macro,
41-
required String uri,
42-
required String augmentation}) async {
43-
print(' ${macro.name} --${augmentation.length}--> $uri');
44-
if (_augmentationsByUri[uri] == null) {
45-
_augmentationsByUri[uri] = {};
39+
Future<void> augment({
40+
required QualifiedName macro,
41+
required Map<String, String> augmentationsByUri,
42+
}) async {
43+
final size =
44+
augmentationsByUri.values.map((v) => v.length).fold(0, (a, b) => a + b);
45+
print(
46+
' ${macro.name} augments ${augmentationsByUri.length} uri(s), $size char(s).');
47+
for (final uri in augmentationsByUri.keys) {
48+
if (_augmentationsByMacroByUri[uri] == null) {
49+
_augmentationsByMacroByUri[uri] = {};
50+
}
51+
final augmentations = _augmentationsByMacroByUri[uri]!;
52+
augmentations[macro] = augmentationsByUri[uri]!;
53+
_augmentationsToWrite.add(uri);
4654
}
47-
final augmentations = _augmentationsByUri[uri]!;
48-
augmentations[macro] = augmentation;
49-
_augmentationsToWrite.add(uri);
5055

5156
// Give other augmentations a chance to arrive before flushing.
5257
if (_flushing) return;
@@ -67,7 +72,7 @@ class MacroHost implements Host {
6772
_augmentationsToWrite.clear();
6873
final futures = <Future>[];
6974
for (final uri in augmentationsToWrite) {
70-
final augmentations = _augmentationsByUri[uri]!;
75+
final augmentations = _augmentationsByMacroByUri[uri]!;
7176
final baseFile = uriConverter(Uri.parse(uri))!;
7277
final baseName =
7378
baseFile.path.substring(baseFile.path.lastIndexOf('/') + 1);

working/macros/dart_model/macro_host/lib/socket_client.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class SocketClient {
4040
});
4141
} else if (message.isAugmentRequest) {
4242
final request = message.asAugmentRequest;
43-
unawaited(augment(request.macro, request.uri, request.augmentation));
43+
unawaited(augment(request.macro, request.augmentationsByUri));
4444
}
4545
}
4646

4747
Future<void> augment(
48-
QualifiedName macro, String uri, String augmentation) async {
49-
await host.augment(macro: macro, uri: uri, augmentation: augmentation);
48+
QualifiedName macro, Map<String, String> augmentationsByUri) async {
49+
await host.augment(macro: macro, augmentationsByUri: augmentationsByUri);
5050
}
5151
}

working/macros/dart_model/macro_protocol/lib/host.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import 'package:dart_model/query.dart';
77

88
abstract interface class Host {
99
Service get service;
10-
Future<void> augment(
11-
{required QualifiedName macro,
12-
required String uri,
13-
required String augmentation});
10+
Future<void> augment({
11+
required QualifiedName macro,
12+
required Map<String, String> augmentationsByUri,
13+
});
1414
}

working/macros/dart_model/macro_protocol/lib/message.dart

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,18 @@ extension type WatchResponse.fromJson(Map<String, Object?> node) {
7272

7373
extension type AugmentRequest.fromJson(Map<String, Object?> node)
7474
implements Message {
75-
AugmentRequest(
76-
{required QualifiedName macro,
77-
required String uri,
78-
required String augmentation})
79-
: this.fromJson({
75+
AugmentRequest({
76+
required QualifiedName macro,
77+
required Map<String, String> augmentationsByUri,
78+
}) : this.fromJson({
8079
'type': 'augment',
8180
'macro': macro.toString(),
82-
'uri': uri,
83-
'augmentation': augmentation,
81+
'augmentationsByUri': augmentationsByUri,
8482
});
8583

8684
QualifiedName get macro => QualifiedName.tryParse(node['macro'] as String)!;
87-
String get uri => node['uri'] as String;
88-
String get augmentation => node['augmentation'] as String;
85+
Map<String, String> get augmentationsByUri =>
86+
(node['augmentationsByUri'] as Map).cast();
8987
}
9088

9189
extension type AugmentResponse.fromJson(Map<String, Object?> node) {

working/macros/dart_model/testing/test_macros/lib/equals_macro.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class EqualsMacro implements Macro {
3030
void generate(Host host, Delta delta) async {
3131
delta.update(model);
3232

33+
final augmentationsByUri = <String, String>{};
3334
for (final uri in delta.uris) {
3435
final library = model.library(uri)!;
3536
final result = StringBuffer();
@@ -38,9 +39,11 @@ class EqualsMacro implements Macro {
3839
result.write(generateFor(clazz));
3940
}
4041

41-
unawaited(
42-
host.augment(macro: name, uri: uri, augmentation: result.toString()));
42+
augmentationsByUri[uri] = result.toString();
4343
}
44+
45+
unawaited(
46+
host.augment(macro: name, augmentationsByUri: augmentationsByUri));
4447
}
4548

4649
String generateFor(Interface clazz) {

working/macros/dart_model/testing/test_macros/lib/hash_code_macro.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class HashCodeMacro implements Macro {
3030
void generate(Host host, Delta delta) async {
3131
delta.update(model);
3232

33+
final augmentationsByUri = <String, String>{};
3334
for (final uri in delta.uris) {
3435
final library = model.library(uri)!;
3536
final result = StringBuffer();
@@ -38,9 +39,11 @@ class HashCodeMacro implements Macro {
3839
result.write(generateFor(clazz));
3940
}
4041

41-
unawaited(
42-
host.augment(macro: name, uri: uri, augmentation: result.toString()));
42+
augmentationsByUri[uri] = result.toString();
4343
}
44+
45+
unawaited(
46+
host.augment(macro: name, augmentationsByUri: augmentationsByUri));
4447
}
4548

4649
String generateFor(Interface clazz) {

working/macros/dart_model/testing/test_macros/lib/to_string_macro.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ToStringMacro implements Macro {
3030
void generate(Host host, Delta delta) async {
3131
delta.update(model);
3232

33+
final augmentationsByUri = <String, String>{};
3334
for (final uri in delta.uris) {
3435
final library = model.library(uri)!;
3536
final result = StringBuffer();
@@ -38,9 +39,11 @@ class ToStringMacro implements Macro {
3839
result.write(generateFor(clazz));
3940
}
4041

41-
unawaited(
42-
host.augment(macro: name, uri: uri, augmentation: result.toString()));
42+
augmentationsByUri[uri] = result.toString();
4343
}
44+
45+
unawaited(
46+
host.augment(macro: name, augmentationsByUri: augmentationsByUri));
4447
}
4548

4649
String generateFor(Interface clazz) {

0 commit comments

Comments
 (0)