Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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 reduces the number of File write operations sent to the operating
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