Skip to content
Merged
Next Next commit
create files before writing in it
  • Loading branch information
Nitin-Poojary committed Aug 7, 2023
commit 2611c6e7d160fc0fc209f46d6a3a772466eb898d
54 changes: 32 additions & 22 deletions packages/pigeon/lib/pigeon_lib.dart
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ Iterable<String> _lineReader(String path) sync* {
}
}

IOSink? _openSink(String? output, {String basePath = ''}) {
Future<IOSink?> _openSink(String? output, {String basePath = ''}) async {
if (output == null) {
return null;
}
Expand All @@ -389,6 +389,7 @@ IOSink? _openSink(String? output, {String basePath = ''}) {
sink = stdout;
} else {
file = File(path.posix.join(basePath, output));
await file.create(recursive: true);
sink = file.openWrite();
}
return sink;
Expand All @@ -407,7 +408,7 @@ abstract class GeneratorAdapter {
/// if the [GeneratorAdapter] should generate.
///
/// If it returns `null`, the [GeneratorAdapter] will be skipped.
IOSink? shouldGenerate(PigeonOptions options, FileType fileType);
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType fileType);

/// Write the generated code described in [root] to [sink] using the [options].
void generate(
Expand Down Expand Up @@ -451,8 +452,8 @@ class AstGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) =>
_openSink(options.astOut, basePath: options.basePath ?? '');
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async =>
await _openSink(options.astOut, basePath: options.basePath ?? '');

@override
List<Error> validate(PigeonOptions options, Root root) => <Error>[];
Expand All @@ -472,6 +473,7 @@ class DartGeneratorAdapter implements GeneratorAdapter {
final DartOptions dartOptionsWithHeader = _dartOptionsWithCopyrightHeader(
options.dartOptions,
options.copyrightHeader,
dartOutPath: options.dartOut,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is this change related to the fix?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made this change to investigate something, but then I forgot to revert it. Later, I mistakenly assumed that I had made the change intentionally, and I apologize for that.

basePath: options.basePath ?? '',
);
const DartGenerator generator = DartGenerator();
Expand All @@ -484,8 +486,8 @@ class DartGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) =>
_openSink(options.dartOut, basePath: options.basePath ?? '');
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async =>
await _openSink(options.dartOut, basePath: options.basePath ?? '');

@override
List<Error> validate(PigeonOptions options, Root root) => <Error>[];
Expand Down Expand Up @@ -524,9 +526,10 @@ class DartTestGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) {
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async {
if (options.dartTestOut != null) {
return _openSink(options.dartTestOut, basePath: options.basePath ?? '');
return await _openSink(options.dartTestOut,
basePath: options.basePath ?? '');
} else {
return null;
}
Expand Down Expand Up @@ -568,11 +571,14 @@ class ObjcGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType fileType) {
Future<IOSink?> shouldGenerate(
PigeonOptions options, FileType fileType) async {
if (fileType == FileType.source) {
return _openSink(options.objcSourceOut, basePath: options.basePath ?? '');
return await _openSink(options.objcSourceOut,
basePath: options.basePath ?? '');
} else {
return _openSink(options.objcHeaderOut, basePath: options.basePath ?? '');
return await _openSink(options.objcHeaderOut,
basePath: options.basePath ?? '');
}
}

Expand Down Expand Up @@ -610,8 +616,8 @@ class JavaGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) =>
_openSink(options.javaOut, basePath: options.basePath ?? '');
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async =>
await _openSink(options.javaOut, basePath: options.basePath ?? '');

@override
List<Error> validate(PigeonOptions options, Root root) => <Error>[];
Expand Down Expand Up @@ -645,8 +651,8 @@ class SwiftGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) =>
_openSink(options.swiftOut, basePath: options.basePath ?? '');
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async =>
await _openSink(options.swiftOut, basePath: options.basePath ?? '');

@override
List<Error> validate(PigeonOptions options, Root root) => <Error>[];
Expand Down Expand Up @@ -684,11 +690,14 @@ class CppGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType fileType) {
Future<IOSink?> shouldGenerate(
PigeonOptions options, FileType fileType) async {
if (fileType == FileType.source) {
return _openSink(options.cppSourceOut, basePath: options.basePath ?? '');
return await _openSink(options.cppSourceOut,
basePath: options.basePath ?? '');
} else {
return _openSink(options.cppHeaderOut, basePath: options.basePath ?? '');
return await _openSink(options.cppHeaderOut,
basePath: options.basePath ?? '');
}
}

Expand Down Expand Up @@ -726,8 +735,8 @@ class KotlinGeneratorAdapter implements GeneratorAdapter {
}

@override
IOSink? shouldGenerate(PigeonOptions options, FileType _) =>
_openSink(options.kotlinOut, basePath: options.basePath ?? '');
Future<IOSink?> shouldGenerate(PigeonOptions options, FileType _) async =>
await _openSink(options.kotlinOut, basePath: options.basePath ?? '');

@override
List<Error> validate(PigeonOptions options, Root root) => <Error>[];
Expand Down Expand Up @@ -1562,7 +1571,8 @@ ${_argParser.usage}''';
}

for (final GeneratorAdapter adapter in safeGeneratorAdapters) {
final IOSink? sink = adapter.shouldGenerate(options, FileType.source);
final IOSink? sink =
await adapter.shouldGenerate(options, FileType.source);
if (sink != null) {
final List<Error> adapterErrors =
adapter.validate(options, parseResults.root);
Expand Down Expand Up @@ -1605,7 +1615,7 @@ ${_argParser.usage}''';

for (final GeneratorAdapter adapter in safeGeneratorAdapters) {
for (final FileType fileType in adapter.fileTypeList) {
final IOSink? sink = adapter.shouldGenerate(options, fileType);
final IOSink? sink = await adapter.shouldGenerate(options, fileType);
if (sink != null) {
adapter.generate(sink, options, parseResults.root, fileType);
await sink.flush();
Expand Down