@@ -135,19 +135,19 @@ extension CodeGenerator {
135
135
extensionMap. insert ( contentsOf: customOptionExtensions)
136
136
}
137
137
138
- let response : Google_Protobuf_Compiler_CodeGeneratorResponse
138
+ let request : Google_Protobuf_Compiler_CodeGeneratorRequest
139
139
do {
140
- let request = try Google_Protobuf_Compiler_CodeGeneratorRequest (
140
+ request = try Google_Protobuf_Compiler_CodeGeneratorRequest (
141
141
serializedBytes: FileHandle . standardInput. readDataToEndOfFile ( ) ,
142
142
extensions: extensionMap
143
143
)
144
- response = generateCode ( request: request, generator: self )
145
144
} catch let e {
146
- response = Google_Protobuf_Compiler_CodeGeneratorResponse (
147
- error : " Received an unparsable request from the compiler: \( e) "
148
- )
145
+ var stderr = StandardErrorOutputStream ( )
146
+ print ( " \( programName ) : Received an unparsable request from the compiler: \( e) " , to : & stderr )
147
+ return
149
148
}
150
149
150
+ let response = generateCode ( request: request, generator: self )
151
151
let serializedResponse : Data
152
152
do {
153
153
serializedResponse = try response. serializedBytes ( )
@@ -216,38 +216,8 @@ public func generateCode(
216
216
request: Google_Protobuf_Compiler_CodeGeneratorRequest ,
217
217
generator: any CodeGenerator
218
218
) -> Google_Protobuf_Compiler_CodeGeneratorResponse {
219
- // TODO: This will need update to language specific features.
220
-
221
- let descriptorSet = DescriptorSet ( protos: request. protoFile)
222
-
223
- var files = [ FileDescriptor] ( )
224
- for name in request. fileToGenerate {
225
- guard let fileDescriptor = descriptorSet. fileDescriptor ( named: name) else {
226
- return Google_Protobuf_Compiler_CodeGeneratorResponse (
227
- error:
228
- " protoc asked plugin to generate a file but did not provide a descriptor for the file: \( name) "
229
- )
230
- }
231
- files. append ( fileDescriptor)
232
- }
233
-
234
- let context = InternalProtoCompilerContext ( request: request)
235
- let outputs = InternalGeneratorOutputs ( )
236
- let parameter = InternalCodeGeneratorParameter ( request. parameter)
237
-
238
- do {
239
- try generator. generate (
240
- files: files,
241
- parameter: parameter,
242
- protoCompilerContext: context,
243
- generatorOutputs: outputs
244
- )
245
- } catch let e {
246
- return Google_Protobuf_Compiler_CodeGeneratorResponse ( error: String ( describing: e) )
247
- }
248
219
249
220
var response = Google_Protobuf_Compiler_CodeGeneratorResponse ( )
250
- response. file = outputs. files
251
221
252
222
// TODO: Could supportedFeatures be completely handled within library?
253
223
// - The only "hard" part around hiding the proto3 optional support is making
@@ -277,6 +247,37 @@ public func generateCode(
277
247
response. maximumEdition = Int32 ( supportedEditions. upperBound. rawValue)
278
248
}
279
249
250
+ // TODO: This will need update to language specific features.
251
+
252
+ let descriptorSet = DescriptorSet ( protos: request. protoFile)
253
+
254
+ var files = [ FileDescriptor] ( )
255
+ for name in request. fileToGenerate {
256
+ guard let fileDescriptor = descriptorSet. fileDescriptor ( named: name) else {
257
+ response. error =
258
+ " protoc asked plugin to generate a file but did not provide a descriptor for the file: \( name) "
259
+ return response
260
+ }
261
+ files. append ( fileDescriptor)
262
+ }
263
+
264
+ let context = InternalProtoCompilerContext ( request: request)
265
+ let outputs = InternalGeneratorOutputs ( )
266
+ let parameter = InternalCodeGeneratorParameter ( request. parameter)
267
+
268
+ do {
269
+ try generator. generate (
270
+ files: files,
271
+ parameter: parameter,
272
+ protoCompilerContext: context,
273
+ generatorOutputs: outputs
274
+ )
275
+ response. file = outputs. files
276
+ } catch let e {
277
+ // Use the description from whatever the Generator threw as the error message.
278
+ response. error = String ( describing: e)
279
+ }
280
+
280
281
return response
281
282
}
282
283
0 commit comments