Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/pigeon/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 26.1.10

* Dramatically reduce the number of File write operations sent to the operating
Comment thread
srawlins marked this conversation as resolved.
Outdated
system during code-generation. This improves performance of IDEs and the Dart
analysis server.

## 26.1.9

* [dart] Reduces much duplication in reply-handling code.
Expand Down
3 changes: 2 additions & 1 deletion packages/pigeon/lib/src/ast_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'generator_tools.dart';

/// Writes the AST representation of [root] to [sink].
void generateAst(Root root, StringSink sink) {
final indent = Indent(sink);
final indent = Indent();
final output = root.toString();
var isFirst = true;
for (final int ch in output.runes) {
Expand All @@ -26,4 +26,5 @@ void generateAst(Root root, StringSink sink) {
indent.add(chStr);
}
indent.addln('');
sink.write(indent.toString());
}
21 changes: 11 additions & 10 deletions packages/pigeon/lib/src/dart/dart_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -774,9 +774,9 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
])
..body = cb.Block.of(
cb.Block((cb.BlockBuilder builder) {
final messageHandlerSink = StringBuffer();
final messageHandlerIndent = Indent();
writeFlutterMethodMessageHandler(
Indent(messageHandlerSink),
messageHandlerIndent,
name: 'removeStrongReferenceName',
parameters: <Parameter>[
Parameter(
Expand Down Expand Up @@ -805,7 +805,7 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
},
);
builder.statements.add(
cb.Code(messageHandlerSink.toString()),
cb.Code(messageHandlerIndent.toString()),
);
}).statements,
);
Expand All @@ -825,9 +825,9 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
),
)
..body = cb.Block((cb.BlockBuilder builder) {
final messageCallSink = StringBuffer();
final messageCallIndent = Indent();
writeHostMethodMessageCall(
Indent(messageCallSink),
messageCallIndent,
addSuffixVariable: false,
channelName: makeRemoveStrongReferenceChannelName(
dartPackageName,
Expand All @@ -844,7 +844,7 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
returnType: const TypeDeclaration.voidDeclaration(),
);
builder.statements.addAll(<cb.Code>[
cb.Code(messageCallSink.toString()),
cb.Code(messageCallIndent.toString()),
]);
});
}),
Expand All @@ -859,16 +859,16 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
'/// This is typically called after a hot restart.',
])
..body = cb.Block((cb.BlockBuilder builder) {
final messageCallSink = StringBuffer();
final messageCallIndent = Indent();
writeHostMethodMessageCall(
Indent(messageCallSink),
messageCallIndent,
addSuffixVariable: false,
channelName: makeClearChannelName(dartPackageName),
parameters: <Parameter>[],
returnType: const TypeDeclaration.voidDeclaration(),
);
builder.statements.addAll(<cb.Code>[
cb.Code(messageCallSink.toString()),
cb.Code(messageCallIndent.toString()),
]);
});
}),
Expand Down Expand Up @@ -1029,7 +1029,7 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
required String dartPackageName,
required String dartOutputPackageName,
}) {
final indent = Indent(sink);
final indent = Indent();
final String sourceOutPath = generatorOptions.dartOut ?? '';
final String testOutPath = generatorOptions.testOut ?? '';
_writeTestPrologue(generatorOptions, root, indent);
Expand Down Expand Up @@ -1079,6 +1079,7 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger;
);
}
}
sink.write(indent.toString());
}

/// Writes file header to sink.
Expand Down
30 changes: 15 additions & 15 deletions packages/pigeon/lib/src/dart/proxy_api_generator_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -461,9 +461,9 @@ Iterable<cb.Constructor> constructors(
const cb.Code('super.${classMemberNamePrefix}detached()'),
])
..body = cb.Block((cb.BlockBuilder builder) {
final messageCallSink = StringBuffer();
final messageCallIndent = Indent();
DartGenerator.writeHostMethodMessageCall(
Indent(messageCallSink),
messageCallIndent,
addSuffixVariable: false,
channelName: channelName,
insideAsyncMethod: false,
Expand Down Expand Up @@ -492,7 +492,7 @@ Iterable<cb.Constructor> constructors(
cb.Code(
'final BinaryMessenger? ${varNamePrefix}binaryMessenger = ${binaryMessengerParameter.name};',
),
cb.Code(messageCallSink.toString()),
cb.Code(messageCallIndent.toString()),
]);
});
});
Expand Down Expand Up @@ -792,10 +792,10 @@ cb.Method setUpMessageHandlerMethod({
],
if (hasCallbackConstructor)
...cb.Block((cb.BlockBuilder builder) {
final messageHandlerSink = StringBuffer();
final messageHandlerIndent = Indent();
const methodName = '${classMemberNamePrefix}newInstance';
DartGenerator.writeFlutterMethodMessageHandler(
Indent(messageHandlerSink),
messageHandlerIndent,
name: methodName,
parameters: <Parameter>[
Parameter(
Expand Down Expand Up @@ -844,13 +844,13 @@ cb.Method setUpMessageHandlerMethod({
')';
},
);
builder.statements.add(cb.Code(messageHandlerSink.toString()));
builder.statements.add(cb.Code(messageHandlerIndent.toString()));
}).statements,
for (final Method method in flutterMethods)
...cb.Block((cb.BlockBuilder builder) {
final messageHandlerSink = StringBuffer();
final messageHandlerIndent = Indent();
DartGenerator.writeFlutterMethodMessageHandler(
Indent(messageHandlerSink),
messageHandlerIndent,
name: method.name,
parameters: <Parameter>[
Parameter(
Expand Down Expand Up @@ -885,7 +885,7 @@ cb.Method setUpMessageHandlerMethod({
return '($methodName ?? ${safeArgumentNames.first}.$methodName)$nullability.call(${safeArgumentNames.join(',')})';
},
);
builder.statements.add(cb.Code(messageHandlerSink.toString()));
builder.statements.add(cb.Code(messageHandlerIndent.toString()));
}).statements,
]),
);
Expand Down Expand Up @@ -913,9 +913,9 @@ Iterable<cb.Method> attachedFieldMethods(
..static = field.isStatic
..returns = cb.refer(type)
..body = cb.Block((cb.BlockBuilder builder) {
final messageCallSink = StringBuffer();
final messageCallIndent = Indent();
DartGenerator.writeHostMethodMessageCall(
Indent(messageCallSink),
messageCallIndent,
addSuffixVariable: false,
channelName: makeChannelNameWithStrings(
apiName: apiName,
Expand Down Expand Up @@ -968,7 +968,7 @@ Iterable<cb.Method> attachedFieldMethods(
),
],
const cb.Code('() async {'),
cb.Code(messageCallSink.toString()),
cb.Code(messageCallIndent.toString()),
const cb.Code('}();'),
const cb.Code('return $instanceName;'),
]);
Expand Down Expand Up @@ -1023,9 +1023,9 @@ Iterable<cb.Method> hostMethods(
],
])
..body = cb.Block((cb.BlockBuilder builder) {
final messageCallSink = StringBuffer();
final messageCallIndent = Indent();
DartGenerator.writeHostMethodMessageCall(
Indent(messageCallSink),
messageCallIndent,
addSuffixVariable: false,
channelName: makeChannelNameWithStrings(
apiName: apiName,
Expand Down Expand Up @@ -1073,7 +1073,7 @@ Iterable<cb.Method> hostMethods(
const cb.Code(
'final BinaryMessenger? ${varNamePrefix}binaryMessenger = ${classMemberNamePrefix}binaryMessenger;',
),
cb.Code(messageCallSink.toString()),
cb.Code(messageCallIndent.toString()),
]);
}),
);
Expand Down
4 changes: 3 additions & 1 deletion packages/pigeon/lib/src/generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ abstract class StructuredGenerator<T extends InternalOptions>
StringSink sink, {
required String dartPackageName,
}) {
final indent = Indent(sink);
final indent = Indent();

writeFilePrologue(
generatorOptions,
Expand Down Expand Up @@ -117,6 +117,8 @@ abstract class StructuredGenerator<T extends InternalOptions>
indent,
dartPackageName: dartPackageName,
);

sink.write(indent.toString());
}

/// Adds specified headers to [indent].
Expand Down
30 changes: 15 additions & 15 deletions packages/pigeon/lib/src/generator_tools.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import 'generator.dart';
/// The current version of pigeon.
///
/// This must match the version in pubspec.yaml.
const String pigeonVersion = '26.1.9';
const String pigeonVersion = '26.1.10';

/// Read all the content from [stdin] to a String.
String readStdin() {
Expand All @@ -31,13 +31,13 @@ String readStdin() {
/// True if the generator line number should be printed out at the end of newlines.
bool debugGenerators = false;

/// A helper class for managing indentation, wrapping a [StringSink].
/// A helper class for managing indentation, wrapping a [StringBuffer].
class Indent {
/// Constructor which takes a [StringSink] which this [Indent] will wrap.
Indent(this._sink);

int _count = 0;
final StringSink _sink;
final StringBuffer _buffer = StringBuffer();

@override
String toString() => _buffer.toString();

/// String used for newlines (ex "\n").
String get newline {
Expand Down Expand Up @@ -119,13 +119,13 @@ class Indent {
int nestCount = 1,
}) {
if (begin != null) {
_sink.write(begin + newline);
_buffer.write(begin + newline);
}
nest(nestCount, func);
if (end != null && end.isNotEmpty) {
_sink.write(str() + end);
_buffer.write(str() + end);
if (addTrailingNewline) {
_sink.write(newline);
_buffer.write(newline);
}
}
}
Expand Down Expand Up @@ -159,31 +159,31 @@ class Indent {
/// Add [text] with indentation and a newline.
void writeln(String text) {
if (text.isEmpty) {
_sink.write(newline);
_buffer.write(newline);
} else {
_sink.write(str() + text + newline);
_buffer.write(str() + text + newline);
}
}

/// Add [text] with indentation.
void write(String text) {
_sink.write(str() + text);
_buffer.write(str() + text);
}

/// Add [text] with a newline.
void addln(String text) {
_sink.write(text + newline);
_buffer.write(text + newline);
}

/// Just adds [text].
void add(String text) {
_sink.write(text);
_buffer.write(text);
}

/// Adds [lines] number of newlines.
void newln([int lines = 1]) {
for (; lines > 0; lines--) {
_sink.write(newline);
_buffer.write(newline);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/pigeon/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: pigeon
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
repository: https://github.com/flutter/packages/tree/main/packages/pigeon
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22
version: 26.1.9 # This must match the version in lib/src/generator_tools.dart
version: 26.1.10 # This must match the version in lib/src/generator_tools.dart

environment:
sdk: ^3.9.0
Expand Down
5 changes: 2 additions & 3 deletions packages/pigeon/test/generator_tools_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -500,16 +500,15 @@ void main() {
});

test('Indent.format trims indentation', () {
final buffer = StringBuffer();
final indent = Indent(buffer);
final indent = Indent();

indent.format('''
void myMethod() {

print('hello');
}''');

expect(buffer.toString(), '''
expect(indent.toString(), '''
void myMethod() {

print('hello');
Expand Down
Loading