25
25
import java .util .ServiceLoader ;
26
26
import java .util .Set ;
27
27
import java .util .TreeSet ;
28
+ import java .util .function .BiFunction ;
28
29
import java .util .logging .Logger ;
29
30
import software .amazon .smithy .build .FileManifest ;
30
31
import software .amazon .smithy .build .PluginContext ;
@@ -70,15 +71,18 @@ class CodegenVisitor extends ShapeVisitor.Default<Void> {
70
71
private final ServiceShape service ;
71
72
private final FileManifest fileManifest ;
72
73
private final SymbolProvider symbolProvider ;
73
- private final SymbolProvider serverSymbolProvider ;
74
74
private final Model nonTraits ;
75
75
private final TypeScriptDelegator writers ;
76
76
private final List <TypeScriptIntegration > integrations = new ArrayList <>();
77
77
private final List <RuntimeClientPlugin > runtimePlugins = new ArrayList <>();
78
78
private final ProtocolGenerator protocolGenerator ;
79
79
private final ApplicationProtocol applicationProtocol ;
80
80
81
- CodegenVisitor (PluginContext context ) {
81
+ CodegenVisitor (
82
+ PluginContext context ,
83
+ BiFunction <Model , TypeScriptSettings , SymbolProvider > createSymbolProvider ,
84
+ TypeScriptSettings .ArtifactType artifactType
85
+ ) {
82
86
// Load all integrations.
83
87
ClassLoader loader = context .getPluginClassLoader ().orElse (getClass ().getClassLoader ());
84
88
LOGGER .info ("Attempting to discover TypeScriptIntegration from the classpath..." );
@@ -96,6 +100,7 @@ class CodegenVisitor extends ShapeVisitor.Default<Void> {
96
100
97
101
// Preprocess model using integrations.
98
102
TypeScriptSettings typescriptSettings = TypeScriptSettings .from (context .getModel (), context .getSettings ());
103
+ typescriptSettings .setArtifactType (artifactType );
99
104
for (TypeScriptIntegration integration : integrations ) {
100
105
Model modifiedModel = integration .preprocessModel (context , typescriptSettings );
101
106
if (modifiedModel != context .getModel ()) {
@@ -112,16 +117,11 @@ class CodegenVisitor extends ShapeVisitor.Default<Void> {
112
117
settings .generateClient () ? "client" : "server" , service .getId ()));
113
118
114
119
// Decorate the symbol provider using integrations.
115
- SymbolProvider resolvedProvider = TypeScriptCodegenPlugin . createSymbolProvider (model , settings );
120
+ SymbolProvider resolvedProvider = createSymbolProvider . apply (model , settings );
116
121
for (TypeScriptIntegration integration : integrations ) {
117
122
resolvedProvider = integration .decorateSymbolProvider (settings , model , resolvedProvider );
118
123
}
119
124
symbolProvider = SymbolProvider .cache (resolvedProvider );
120
- if (settings .generateServerSdk ()) {
121
- serverSymbolProvider = SymbolProvider .cache (new ServerSymbolVisitor (model , symbolProvider ));
122
- } else {
123
- serverSymbolProvider = symbolProvider ;
124
- }
125
125
126
126
// Resolve the nullable protocol generator and application protocol.
127
127
protocolGenerator = resolveProtocolGenerator (integrations , service , settings );
@@ -204,14 +204,14 @@ void execute() {
204
204
205
205
if (settings .generateServerSdk ()) {
206
206
// Generate index for server
207
- IndexGenerator .writeServerIndex (settings , model , serverSymbolProvider , fileManifest );
207
+ IndexGenerator .writeServerIndex (settings , model , symbolProvider , fileManifest );
208
208
}
209
209
210
210
// Generate protocol tests IFF found in the model.
211
211
if (protocolGenerator != null ) {
212
212
ShapeId protocol = protocolGenerator .getProtocol ();
213
213
new HttpProtocolTestGenerator (
214
- settings , model , protocol , symbolProvider , serverSymbolProvider , writers , protocolGenerator ).run ();
214
+ settings , model , protocol , symbolProvider , writers , protocolGenerator ).run ();
215
215
}
216
216
217
217
// Write each pending writer.
@@ -290,8 +290,8 @@ public Void stringShape(StringShape shape) {
290
290
@ Override
291
291
public Void operationShape (OperationShape operation ) {
292
292
if (settings .generateServerSdk ()) {
293
- writers .useShapeWriter (operation , serverSymbolProvider , w -> {
294
- ServerGenerator .generateOperationHandler (serverSymbolProvider , service , operation , w );
293
+ writers .useShapeWriter (operation , symbolProvider , w -> {
294
+ ServerGenerator .generateOperationHandler (symbolProvider , service , operation , w );
295
295
});
296
296
}
297
297
return null ;
@@ -334,15 +334,15 @@ public Void serviceShape(ServiceShape shape) {
334
334
}
335
335
if (context .getSettings ().generateServerSdk ()) {
336
336
ProtocolGenerator .GenerationContext serverContext =
337
- context .withSymbolProvider (serverSymbolProvider );
337
+ context .withSymbolProvider (symbolProvider );
338
338
protocolGenerator .generateRequestDeserializers (serverContext );
339
339
protocolGenerator .generateResponseSerializers (serverContext );
340
340
protocolGenerator .generateFrameworkErrorSerializer (serverContext );
341
- writers .useShapeWriter (shape , serverSymbolProvider , w -> {
341
+ writers .useShapeWriter (shape , symbolProvider , w -> {
342
342
protocolGenerator .generateServiceHandlerFactory (serverContext .withWriter (w ));
343
343
});
344
344
for (OperationShape operation : TopDownIndex .of (model ).getContainedOperations (service )) {
345
- writers .useShapeWriter (operation , serverSymbolProvider , w -> {
345
+ writers .useShapeWriter (operation , symbolProvider , w -> {
346
346
protocolGenerator .generateOperationHandlerFactory (serverContext .withWriter (w ), operation );
347
347
});
348
348
}
@@ -403,10 +403,10 @@ private void generateClient(ServiceShape shape) {
403
403
private void generateServiceInterface (ServiceShape shape ) {
404
404
TopDownIndex topDownIndex = TopDownIndex .of (model );
405
405
Set <OperationShape > operations = new TreeSet <>(topDownIndex .getContainedOperations (shape ));
406
- writers .useShapeWriter (shape , serverSymbolProvider , writer -> {
407
- ServerGenerator .generateOperationsType (serverSymbolProvider , shape , operations , writer );
408
- ServerGenerator .generateServerInterfaces (serverSymbolProvider , shape , operations , writer );
409
- ServerGenerator .generateServiceHandler (serverSymbolProvider , shape , operations , writer );
406
+ writers .useShapeWriter (shape , symbolProvider , writer -> {
407
+ ServerGenerator .generateOperationsType (symbolProvider , shape , operations , writer );
408
+ ServerGenerator .generateServerInterfaces (symbolProvider , shape , operations , writer );
409
+ ServerGenerator .generateServiceHandler (symbolProvider , shape , operations , writer );
410
410
});
411
411
}
412
412
@@ -418,8 +418,8 @@ private void generateServerErrors(ServiceShape service) {
418
418
.distinct ()
419
419
.map (id -> model .expectShape (id ).asStructureShape ().orElseThrow (IllegalArgumentException ::new ))
420
420
.sorted ()
421
- .forEachOrdered (error -> writers .useShapeWriter (service , serverSymbolProvider , writer -> {
422
- new ServerErrorGenerator (settings , model , error , serverSymbolProvider , writer ).run ();
421
+ .forEachOrdered (error -> writers .useShapeWriter (service , symbolProvider , writer -> {
422
+ new ServerErrorGenerator (settings , model , error , symbolProvider , writer ).run ();
423
423
}));
424
424
}
425
425
@@ -436,8 +436,8 @@ private void generateCommands(ServiceShape shape) {
436
436
}
437
437
438
438
if (settings .generateServerSdk ()) {
439
- writers .useShapeWriter (operation , serverSymbolProvider , commandWriter -> new ServerCommandGenerator (
440
- settings , model , operation , serverSymbolProvider , commandWriter ,
439
+ writers .useShapeWriter (operation , symbolProvider , commandWriter -> new ServerCommandGenerator (
440
+ settings , model , operation , symbolProvider , commandWriter ,
441
441
protocolGenerator , applicationProtocol ).run ());
442
442
}
443
443
}
0 commit comments