in packages/pigeon/lib/pigeon_lib.dart [1064:1125]
static Future<int> run(List<String> args,
{List<Generator>? generators, String? sdkPath}) async {
final Pigeon pigeon = Pigeon.setup();
PigeonOptions options = Pigeon.parseArgs(args);
if (options.debugGenerators ?? false) {
generator_tools.debugGenerators = true;
}
final List<Generator> safeGenerators = generators ??
<Generator>[
const DartGenerator(),
const JavaGenerator(),
const DartTestGenerator(),
const ObjcHeaderGenerator(),
const ObjcSourceGenerator(),
const AstGenerator(),
];
_executeConfigurePigeon(options);
if (options.input == null) {
print(usage);
return 0;
}
final ParseResults parseResults =
pigeon.parseFile(options.input!, sdkPath: sdkPath);
if (parseResults.pigeonOptions != null) {
options = PigeonOptions.fromMap(
mergeMaps(options.toMap(), parseResults.pigeonOptions!));
}
if (options.oneLanguage == false && options.dartOut == null) {
print(usage);
return 1;
}
final List<Error> errors = <Error>[];
if (options.objcHeaderOut != null) {
options = options.merge(PigeonOptions(
objcOptions: options.objcOptions!.merge(
ObjcOptions(header: path.basename(options.objcHeaderOut!)))));
}
for (final Error err in parseResults.errors) {
errors.add(Error(
message: err.message,
filename: options.input,
lineNumber: err.lineNumber));
}
if (errors.isEmpty) {
for (final Generator generator in safeGenerators) {
final IOSink? sink = generator.shouldGenerate(options);
if (sink != null) {
generator.generate(sink, options, parseResults.root);
await sink.flush();
}
}
}
printErrors(errors);
return errors.isNotEmpty ? 1 : 0;
}