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 ()) {
@@ -111,16 +116,11 @@ class CodegenVisitor extends ShapeVisitor.Default<Void> {
111
116
LOGGER .info (() -> "Generating TypeScript for service " + service .getId ());
112
117
113
118
// Decorate the symbol provider using integrations.
114
- SymbolProvider resolvedProvider = TypeScriptCodegenPlugin . createSymbolProvider (model , settings );
119
+ SymbolProvider resolvedProvider = createSymbolProvider . apply (model , settings );
115
120
for (TypeScriptIntegration integration : integrations ) {
116
121
resolvedProvider = integration .decorateSymbolProvider (settings , model , resolvedProvider );
117
122
}
118
123
symbolProvider = SymbolProvider .cache (resolvedProvider );
119
- if (settings .generateServerSdk ()) {
120
- serverSymbolProvider = SymbolProvider .cache (new ServerSymbolVisitor (model , symbolProvider ));
121
- } else {
122
- serverSymbolProvider = symbolProvider ;
123
- }
124
124
125
125
// Resolve the nullable protocol generator and application protocol.
126
126
protocolGenerator = resolveProtocolGenerator (integrations , service , settings );
@@ -203,14 +203,14 @@ void execute() {
203
203
204
204
if (settings .generateServerSdk ()) {
205
205
// Generate index for server
206
- IndexGenerator .writeServerIndex (settings , model , serverSymbolProvider , fileManifest );
206
+ IndexGenerator .writeServerIndex (settings , model , symbolProvider , fileManifest );
207
207
}
208
208
209
209
// Generate protocol tests IFF found in the model.
210
210
if (protocolGenerator != null ) {
211
211
ShapeId protocol = protocolGenerator .getProtocol ();
212
212
new HttpProtocolTestGenerator (
213
- settings , model , protocol , symbolProvider , serverSymbolProvider , writers , protocolGenerator ).run ();
213
+ settings , model , protocol , symbolProvider , writers , protocolGenerator ).run ();
214
214
}
215
215
216
216
// Write each pending writer.
@@ -289,8 +289,8 @@ public Void stringShape(StringShape shape) {
289
289
@ Override
290
290
public Void operationShape (OperationShape operation ) {
291
291
if (settings .generateServerSdk ()) {
292
- writers .useShapeWriter (operation , serverSymbolProvider , w -> {
293
- ServerGenerator .generateOperationHandler (serverSymbolProvider , service , operation , w );
292
+ writers .useShapeWriter (operation , symbolProvider , w -> {
293
+ ServerGenerator .generateOperationHandler (symbolProvider , service , operation , w );
294
294
});
295
295
}
296
296
return null ;
@@ -333,15 +333,15 @@ public Void serviceShape(ServiceShape shape) {
333
333
}
334
334
if (context .getSettings ().generateServerSdk ()) {
335
335
ProtocolGenerator .GenerationContext serverContext =
336
- context .withSymbolProvider (serverSymbolProvider );
336
+ context .withSymbolProvider (symbolProvider );
337
337
protocolGenerator .generateRequestDeserializers (serverContext );
338
338
protocolGenerator .generateResponseSerializers (serverContext );
339
339
protocolGenerator .generateFrameworkErrorSerializer (serverContext );
340
- writers .useShapeWriter (shape , serverSymbolProvider , w -> {
340
+ writers .useShapeWriter (shape , symbolProvider , w -> {
341
341
protocolGenerator .generateServiceHandlerFactory (serverContext .withWriter (w ));
342
342
});
343
343
for (OperationShape operation : TopDownIndex .of (model ).getContainedOperations (service )) {
344
- writers .useShapeWriter (operation , serverSymbolProvider , w -> {
344
+ writers .useShapeWriter (operation , symbolProvider , w -> {
345
345
protocolGenerator .generateOperationHandlerFactory (serverContext .withWriter (w ), operation );
346
346
});
347
347
}
@@ -402,10 +402,10 @@ private void generateClient(ServiceShape shape) {
402
402
private void generateServiceInterface (ServiceShape shape ) {
403
403
TopDownIndex topDownIndex = TopDownIndex .of (model );
404
404
Set <OperationShape > operations = new TreeSet <>(topDownIndex .getContainedOperations (shape ));
405
- writers .useShapeWriter (shape , serverSymbolProvider , writer -> {
406
- ServerGenerator .generateOperationsType (serverSymbolProvider , shape , operations , writer );
407
- ServerGenerator .generateServerInterfaces (serverSymbolProvider , shape , operations , writer );
408
- ServerGenerator .generateServiceHandler (serverSymbolProvider , shape , operations , writer );
405
+ writers .useShapeWriter (shape , symbolProvider , writer -> {
406
+ ServerGenerator .generateOperationsType (symbolProvider , shape , operations , writer );
407
+ ServerGenerator .generateServerInterfaces (symbolProvider , shape , operations , writer );
408
+ ServerGenerator .generateServiceHandler (symbolProvider , shape , operations , writer );
409
409
});
410
410
}
411
411
@@ -417,8 +417,8 @@ private void generateServerErrors(ServiceShape service) {
417
417
.distinct ()
418
418
.map (id -> model .expectShape (id ).asStructureShape ().orElseThrow (IllegalArgumentException ::new ))
419
419
.sorted ()
420
- .forEachOrdered (error -> writers .useShapeWriter (service , serverSymbolProvider , writer -> {
421
- new ServerErrorGenerator (settings , model , error , serverSymbolProvider , writer ).run ();
420
+ .forEachOrdered (error -> writers .useShapeWriter (service , symbolProvider , writer -> {
421
+ new ServerErrorGenerator (settings , model , error , symbolProvider , writer ).run ();
422
422
}));
423
423
}
424
424
@@ -435,8 +435,8 @@ private void generateCommands(ServiceShape shape) {
435
435
}
436
436
437
437
if (settings .generateServerSdk ()) {
438
- writers .useShapeWriter (operation , serverSymbolProvider , commandWriter -> new ServerCommandGenerator (
439
- settings , model , operation , serverSymbolProvider , commandWriter ,
438
+ writers .useShapeWriter (operation , symbolProvider , commandWriter -> new ServerCommandGenerator (
439
+ settings , model , operation , symbolProvider , commandWriter ,
440
440
protocolGenerator , applicationProtocol ).run ());
441
441
}
442
442
}
0 commit comments