Skip to content

Commit 96882ea

Browse files
Add custom codegen hook before shape generation
Some languages need to generate code before shapes are generated. Previously such languages could have used the service generation hook to perform this, but that was moved to occur after generating the other shapes.
1 parent beeea1f commit 96882ea

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/CodegenDirector.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -292,22 +292,26 @@ public void run() {
292292

293293
LOGGER.fine("All setup done. Beginning code generation");
294294

295+
LOGGER.finest(() -> "Performing custom codegen for "
296+
+ directedCodegen.getClass().getName() + " before shape codegen");
297+
CustomizeDirective<C, S> customizeDirective = new CustomizeDirective<>(context, serviceShape);
298+
directedCodegen.customizeBeforeShapeGeneration(customizeDirective);
299+
300+
LOGGER.finest(() -> "Generating shapes for service " + serviceShape.getId());
295301
generateShapesInService(context, serviceShape);
296302

297303
LOGGER.finest(() -> "Generating service " + serviceShape.getId());
298304
directedCodegen.generateService(new GenerateServiceDirective<>(context, serviceShape));
299305

300-
CustomizeDirective<C, S> postProcess = new CustomizeDirective<>(context, serviceShape);
301-
302306
LOGGER.finest(() -> "Performing custom codegen for "
303307
+ directedCodegen.getClass().getName() + " before integrations");
304-
directedCodegen.customizeBeforeIntegrations(postProcess);
308+
directedCodegen.customizeBeforeIntegrations(customizeDirective);
305309

306310
applyIntegrationCustomizations(context, integrations);
307311

308312
LOGGER.finest(() -> "Performing custom codegen for "
309313
+ directedCodegen.getClass().getName() + " after integrations");
310-
directedCodegen.customizeAfterIntegrations(postProcess);
314+
directedCodegen.customizeAfterIntegrations(customizeDirective);
311315

312316
LOGGER.finest(() -> "Directed codegen finished for " + directedCodegen.getClass().getName());
313317

smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/DirectedCodegen.java

+10
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,16 @@ default void generateResource(GenerateResourceDirective<C, S> directive) {
106106
*/
107107
void generateIntEnumShape(GenerateIntEnumDirective<C, S> directive);
108108

109+
/**
110+
* Performs any necessary code generation before all shapes are generated,
111+
* using the created codegen context object.
112+
*
113+
* @param directive Directive to perform.
114+
*/
115+
default void customizeBeforeShapeGeneration(CustomizeDirective<C, S> directive) {
116+
// Does nothing by default.
117+
}
118+
109119
/**
110120
* Performs any necessary code generation after all shapes are generated,
111121
* using the created codegen context object before integrations perform

0 commit comments

Comments
 (0)