@@ -17,121 +17,128 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
17
17
@override
18
18
FutureOr <String > generateForAnnotatedElement (
19
19
Element element, ConstantReader annotation, BuildStep buildStep) async {
20
- if (element is ! ClassElement ) {
21
- final friendlyName = element.displayName;
22
- throw InvalidGenerationSourceError (
23
- 'Generator cannot target `$friendlyName `.' ,
24
- todo: 'Remove the [Openapi] annotation from `$friendlyName `.' ,
25
- );
26
- }
27
- genericReader
28
- ..addDecoder< annots.Generator > (
29
- (constantReader) => constantReader.enumValue< annots.Generator > ())
30
- ..addDecoder< annots.DioDateLibrary > (
31
- (constantReader) => constantReader.enumValue< annots.DioDateLibrary > ())
32
- ..addDecoder< annots.SerializationFormat > ((constantReader) =>
33
- constantReader.enumValue< annots.SerializationFormat > ());
34
- var separator = '?*?' ;
35
- var command = 'generate' ;
36
-
37
- command = appendInputFileCommandArgs (annotation, command, separator);
38
-
39
- command = appendTemplateDirCommandArgs (annotation, command, separator);
40
-
41
- var generatorName = genericReader
42
- .getEnum< annots.Generator > (annotation.peek ('generatorName' ));
43
- var generator = getGeneratorNameFromEnum (generatorName);
44
- command = '$command $separator -g$separator $generator ' ;
45
-
46
- var outputDirectory =
47
- _readFieldValueAsString (annotation, 'outputDirectory' , '' );
48
- if (outputDirectory.isNotEmpty) {
49
- var alwaysRun = _readFieldValueAsBool (annotation, 'alwaysRun' , false );
50
- var filePath = path.join (outputDirectory, 'lib/api.dart' );
51
- if (! alwaysRun && await File (filePath).exists ()) {
52
- print (
53
- 'OpenapiGenerator :: Codegen skipped because alwaysRun is set to [$alwaysRun ] and $filePath already exists' );
54
- return '' ;
20
+ try {
21
+ if (element is ! ClassElement ) {
22
+ final friendlyName = element.displayName;
23
+ throw InvalidGenerationSourceError (
24
+ 'Generator cannot target `$friendlyName `.' ,
25
+ todo: 'Remove the [Openapi] annotation from `$friendlyName `.' ,
26
+ );
27
+ }
28
+ genericReader
29
+ ..addDecoder< annots.Generator > (
30
+ (constantReader) => constantReader.enumValue< annots.Generator > ())
31
+ ..addDecoder< annots.DioDateLibrary > ((constantReader) =>
32
+ constantReader.enumValue< annots.DioDateLibrary > ())
33
+ ..addDecoder< annots.SerializationFormat > ((constantReader) =>
34
+ constantReader.enumValue< annots.SerializationFormat > ());
35
+ var separator = '?*?' ;
36
+ var command = 'generate' ;
37
+
38
+ command = appendInputFileCommandArgs (annotation, command, separator);
39
+
40
+ command = appendTemplateDirCommandArgs (annotation, command, separator);
41
+
42
+ var generatorName = genericReader
43
+ .getEnum< annots.Generator > (annotation.peek ('generatorName' ));
44
+ var generator = getGeneratorNameFromEnum (generatorName);
45
+ command = '$command $separator -g$separator $generator ' ;
46
+
47
+ var outputDirectory =
48
+ _readFieldValueAsString (annotation, 'outputDirectory' , '' );
49
+ if (outputDirectory.isNotEmpty) {
50
+ var alwaysRun = _readFieldValueAsBool (annotation, 'alwaysRun' , false );
51
+ var filePath = path.join (outputDirectory, 'lib/api.dart' );
52
+ if (! alwaysRun && await File (filePath).exists ()) {
53
+ print (
54
+ 'OpenapiGenerator :: Codegen skipped because alwaysRun is set to [$alwaysRun ] and $filePath already exists' );
55
+ return '' ;
56
+ }
57
+ command = '$command $separator -o$separator ${outputDirectory }' ;
55
58
}
56
- command = '$command $separator -o$separator ${outputDirectory }' ;
57
- }
58
59
59
- command = appendTypeMappingCommandArgs (annotation, command, separator);
60
+ command = appendTypeMappingCommandArgs (annotation, command, separator);
60
61
61
- command =
62
- appendAdditionalPropertiesCommandArgs (annotation, command, separator);
62
+ command =
63
+ appendAdditionalPropertiesCommandArgs (annotation, command, separator);
63
64
64
- command = appendSkipValidateSpecCommandArgs (annotation, command, separator);
65
+ command =
66
+ appendSkipValidateSpecCommandArgs (annotation, command, separator);
65
67
66
- print ('OpenapiGenerator :: [${command .replaceAll (separator , ' ' )}]' );
68
+ print ('OpenapiGenerator :: [${command .replaceAll (separator , ' ' )}]' );
67
69
68
- var binPath = (await Isolate .resolvePackageUri (
69
- Uri .parse ('package:openapi_generator_cli/openapi-generator.jar' )))
70
- .toFilePath (windows: Platform .isWindows);
70
+ var binPath = (await Isolate .resolvePackageUri (
71
+ Uri .parse ('package:openapi_generator_cli/openapi-generator.jar' )))
72
+ .toFilePath (windows: Platform .isWindows);
71
73
72
- // Include java environment variables in command
73
- var JAVA_OPTS = Platform .environment['JAVA_OPTS' ] ?? '' ;
74
+ // Include java environment variables in command
75
+ var JAVA_OPTS = Platform .environment['JAVA_OPTS' ] ?? '' ;
74
76
75
- var arguments = [
76
- '-jar' ,
77
- "${"${binPath }" }" ,
78
- ...command.split (separator).toList (),
79
- ];
80
- if (JAVA_OPTS .isNotEmpty) {
81
- arguments.insert (0 , JAVA_OPTS );
82
- }
77
+ var arguments = [
78
+ '-jar' ,
79
+ "${"${binPath }" }" ,
80
+ ...command.split (separator).toList (),
81
+ ];
82
+ if (JAVA_OPTS .isNotEmpty) {
83
+ arguments.insert (0 , JAVA_OPTS );
84
+ }
83
85
84
- var spaced = '| |' ;
85
- var horiborder = '------------------------------------------------------' ;
86
- print (
87
- '$horiborder \n $spaced \n | Openapi generator for dart |\n $spaced \n $spaced \n $horiborder ' );
88
- print ('Executing command [${command .replaceAll (separator , ' ' )}]' );
86
+ var spaced = '| |' ;
87
+ var horiborder = '------------------------------------------------------' ;
88
+ print (
89
+ '$horiborder \n $spaced \n | Openapi generator for dart |\n $spaced \n $spaced \n $horiborder ' );
90
+ print ('Executing command [${command .replaceAll (separator , ' ' )}]' );
89
91
90
- var exitCode = 0 ;
91
- var pr = await Process .run ('java' , arguments);
92
+ var exitCode = 0 ;
93
+ var pr = await Process .run ('java' , arguments);
92
94
93
- print (pr.stderr);
94
- print (
95
- 'OpenapiGenerator :: Codegen ${pr .exitCode != 0 ? 'Failed' : 'completed successfully' }' );
96
- exitCode = pr.exitCode;
95
+ print (pr.stderr);
96
+ print (
97
+ 'OpenapiGenerator :: Codegen ${pr .exitCode != 0 ? 'Failed' : 'completed successfully' }' );
98
+ exitCode = pr.exitCode;
97
99
98
- // if (!_readFieldValueAsBool(annotation, 'fetchDependencies')) {
99
- // print(
100
- // 'OpenapiGenerator :: Codegen skipping install step because you said so...');
101
- // return '';
102
- // }
100
+ if (! _readFieldValueAsBool (annotation, 'fetchDependencies' )) {
101
+ print (
102
+ 'OpenapiGenerator :: Skipping install step because you said so...' );
103
+ return '' ;
104
+ }
103
105
104
- if (exitCode == 0 ) {
105
- var installOutput = await Process .run ('flutter' , ['pub' , 'get' ],
106
- workingDirectory: '$outputDirectory ' );
106
+ if (exitCode == 0 ) {
107
+ var installOutput = await Process .run ('flutter' , ['pub' , 'get' ],
108
+ runInShell: Platform .isWindows,
109
+ workingDirectory: '$outputDirectory ' );
107
110
108
- print (installOutput.stderr);
109
- print (
110
- 'OpenapiGenerator :: Install exited with code ${installOutput .exitCode }' );
111
- exitCode = installOutput.exitCode;
112
- }
111
+ print (installOutput.stderr);
112
+ print (
113
+ 'OpenapiGenerator :: Install exited with code ${installOutput .exitCode }' );
114
+ exitCode = installOutput.exitCode;
115
+ }
113
116
114
- // if (!_readFieldValueAsBool(annotation, 'runSourceGenOnOutput')) {
115
- // print(
116
- // 'OpenapiGenerator :: Codegen skipping source gen step because you said so...');
117
- // return '';
118
- // }
119
-
120
- if (exitCode == 0 ) {
121
- //run buildrunner to generate files
122
- switch (generatorName) {
123
- case annots.Generator .DART :
124
- case annots.Generator .DART2_API :
125
- print (
126
- 'OpenapiGenerator :: skipping source gen because generator does not need it ::' );
127
- break ;
128
- case annots.Generator .DART_DIO :
129
- case annots.Generator .DART_JAGUAR :
130
- var runnerOutput = await runSourceGen (outputDirectory);
131
- print (
132
- 'OpenapiGenerator :: build runner exited with code ${runnerOutput .exitCode } ::' );
133
- break ;
117
+ if (! _readFieldValueAsBool (annotation, 'runSourceGenOnOutput' )) {
118
+ print (
119
+ 'OpenapiGenerator :: Skipping source gen step because you said so...' );
120
+ return '' ;
121
+ }
122
+
123
+ if (exitCode == 0 ) {
124
+ //run buildrunner to generate files
125
+ switch (generatorName) {
126
+ case annots.Generator .DART :
127
+ case annots.Generator .DART2_API :
128
+ print (
129
+ 'OpenapiGenerator :: skipping source gen because generator does not need it ::' );
130
+ break ;
131
+ case annots.Generator .DART_DIO :
132
+ case annots.Generator .DART_JAGUAR :
133
+ var runnerOutput = await runSourceGen (outputDirectory);
134
+ print (
135
+ 'OpenapiGenerator :: build runner exited with code ${runnerOutput .exitCode } ::' );
136
+ break ;
137
+ }
134
138
}
139
+ } catch (e) {
140
+ print ('Error generating spec ${e }' );
141
+ rethrow ;
135
142
}
136
143
return '' ;
137
144
}
@@ -140,7 +147,7 @@ class OpenapiGenerator extends GeneratorForAnnotation<annots.Openapi> {
140
147
print ('OpenapiGenerator :: running source code generations ::' );
141
148
var c = 'pub run build_runner build --delete-conflicting-outputs' ;
142
149
var runnerOutput = await Process .run ('flutter' , c.split (' ' ).toList (),
143
- workingDirectory: '$outputDirectory ' );
150
+ runInShell : Platform .isWindows, workingDirectory: '$outputDirectory ' );
144
151
print (runnerOutput.stderr);
145
152
return runnerOutput;
146
153
}
0 commit comments