@@ -106,7 +106,8 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
106
106
}
107
107
108
108
if (exitCode == 0 ) {
109
- var installOutput = await Process .run ('flutter' , ['pub' , 'get' ],
109
+ final command = _getCommandWithWrapper ('flutter' , ['pub' , 'get' ], annotation);
110
+ var installOutput = await Process .run (command.executable, command.arguments,
110
111
runInShell: Platform .isWindows,
111
112
workingDirectory: '$outputDirectory ' );
112
113
@@ -133,7 +134,7 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
133
134
case annots.Generator .DART_DIO :
134
135
case annots.Generator .DART_JAGUAR :
135
136
try {
136
- var runnerOutput = await runSourceGen (outputDirectory);
137
+ var runnerOutput = await runSourceGen (annotation, outputDirectory);
137
138
print (
138
139
'OpenapiGenerator :: build runner exited with code ${runnerOutput .exitCode } ::' );
139
140
} catch (e) {
@@ -150,11 +151,12 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
150
151
return '' ;
151
152
}
152
153
153
- Future <ProcessResult > runSourceGen (String outputDirectory) async {
154
+ Future <ProcessResult > runSourceGen (ConstantReader annotation, String outputDirectory) async {
154
155
print ('OpenapiGenerator :: running source code generation ::' );
155
156
var c = 'pub run build_runner build --delete-conflicting-outputs' ;
157
+ final command = _getCommandWithWrapper ('flutter' , c.split (' ' ).toList (), annotation);
156
158
ProcessResult runnerOutput;
157
- runnerOutput = await Process .run ('flutter' , c. split ( ' ' ). toList () ,
159
+ runnerOutput = await Process .run (command.executable, command.arguments ,
158
160
runInShell: Platform .isWindows, workingDirectory: '$outputDirectory ' );
159
161
print (runnerOutput.stderr);
160
162
return runnerOutput;
@@ -259,6 +261,26 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
259
261
.join (',' );
260
262
}
261
263
264
+ Command _getCommandWithWrapper (String command, List <String > arguments, ConstantReader annotation){
265
+ final wrapper = _readFieldValueAsEnum< annots.Wrapper > (annotation, 'wrapper' , annots.Wrapper .none);
266
+ switch (wrapper){
267
+ case annots.Wrapper .flutterw:
268
+ return Command ('./flutterw' , arguments);
269
+ case annots.Wrapper .fvm:
270
+ return Command ('fvm' , [command, ...arguments]);
271
+ case annots.Wrapper .none:
272
+ default :
273
+ return Command (command, arguments);
274
+ }
275
+ }
276
+
277
+ T _readFieldValueAsEnum <T >(ConstantReader annotation, String fieldName,
278
+ [T defaultValue]) {
279
+ var reader = annotation.read (fieldName);
280
+
281
+ return reader.isNull ? defaultValue : reader.enumValue <T >() ?? defaultValue;
282
+ }
283
+
262
284
String _readFieldValueAsString (ConstantReader annotation, String fieldName,
263
285
[String defaultValue]) {
264
286
var reader = annotation.read (fieldName);
@@ -280,3 +302,10 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
280
302
return reader.isNull ? defaultValue : reader.boolValue ?? defaultValue;
281
303
}
282
304
}
305
+
306
+ class Command {
307
+ final String executable;
308
+ final List <String > arguments;
309
+
310
+ Command (this .executable, this .arguments);
311
+ }
0 commit comments