Skip to content

Commit 09b9956

Browse files
Defer file writer creation for protocol tests
1 parent 6457d05 commit 09b9956

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenVisitor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,9 @@ void execute() {
225225
String baseName = protocol.getName().toLowerCase(Locale.US)
226226
.replace("-", "_")
227227
.replace(".", "_");
228-
writers.useFileWriter(String.format("tests/functional/%s.spec.ts", baseName), writer -> {
229-
context.setWriter(writer);
230-
protocolGenerator.generateProtocolTests(context);
231-
});
228+
String protocolTestFileName = String.format("tests/functional/%s.spec.ts", baseName);
229+
context.setDeferredWriter(() -> writers.checkoutFileWriter(protocolTestFileName));
230+
protocolGenerator.generateProtocolTests(context);
232231
}
233232

234233
// Write each pending writer.

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/HttpProtocolTestGenerator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ public final class HttpProtocolTestGenerator implements Runnable {
9696
private final Set<String> additionalStubs = new TreeSet<>();
9797
private final ProtocolGenerator protocolGenerator;
9898
private final TestFilter testFilter;
99+
private final GenerationContext context;
99100

100101
private TypeScriptWriter writer;
101-
private boolean writerInitialized = false;
102102

103103
HttpProtocolTestGenerator(
104104
GenerationContext context,
@@ -110,10 +110,10 @@ public final class HttpProtocolTestGenerator implements Runnable {
110110
this.protocol = context.getSettings().getProtocol();
111111
this.service = settings.getService(model);
112112
this.symbolProvider = context.getSymbolProvider();
113-
this.writer = context.getWriter();
114113
this.protocolGenerator = protocolGenerator;
115114
serviceSymbol = symbolProvider.toSymbol(service);
116115
this.testFilter = testFilter;
116+
this.context = context;
117117
}
118118

119119
HttpProtocolTestGenerator(
@@ -210,12 +210,12 @@ private <T extends HttpMessageTestCase> void onlyIfProtocolMatches(T testCase, R
210210
}
211211

212212
private void initializeWriterIfNeeded() {
213-
if (!writerInitialized) {
213+
if (writer == null) {
214+
writer = context.getWriter();
214215
writer.addDependency(TypeScriptDependency.AWS_SDK_TYPES);
215216
writer.addDependency(TypeScriptDependency.AWS_SDK_PROTOCOL_HTTP);
216217
// Add the template to each generated test.
217218
writer.write(IoUtils.readUtf8Resource(getClass(), "protocol-test-stub.ts"));
218-
writerInitialized = true;
219219
}
220220
}
221221

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/TypeScriptDelegator.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,16 @@ void useFileWriter(String filename, Consumer<TypeScriptWriter> writerConsumer) {
131131
writerConsumer.accept(checkoutWriter(filename));
132132
}
133133

134+
/**
135+
* Gets a previously created writer or creates a new one if needed
136+
* and adds a new line if the writer already exists.
137+
*
138+
* @param filename Name of the file to create.
139+
*/
140+
TypeScriptWriter checkoutFileWriter(String filename) {
141+
return checkoutWriter(filename);
142+
}
143+
134144
private TypeScriptWriter checkoutWriter(String filename) {
135145
String formattedFilename = Paths.get(filename).normalize().toString();
136146
boolean needsNewline = writers.containsKey(formattedFilename);

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/ProtocolGenerator.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.Collection;
1919
import java.util.List;
20+
import java.util.function.Supplier;
2021
import java.util.stream.Collectors;
2122
import software.amazon.smithy.codegen.core.CodegenException;
2223
import software.amazon.smithy.codegen.core.Symbol;
@@ -270,6 +271,7 @@ class GenerationContext {
270271
private ServiceShape service;
271272
private SymbolProvider symbolProvider;
272273
private TypeScriptWriter writer;
274+
private Supplier<TypeScriptWriter> writerSupplier;
273275
private List<TypeScriptIntegration> integrations;
274276
private String protocolName;
275277

@@ -306,11 +308,24 @@ public void setSymbolProvider(SymbolProvider symbolProvider) {
306308
}
307309

308310
public TypeScriptWriter getWriter() {
311+
if (writerSupplier != null && writer == null) {
312+
writer = writerSupplier.get();
313+
}
309314
return writer;
310315
}
311316

312317
public void setWriter(TypeScriptWriter writer) {
313318
this.writer = writer;
319+
if (writer != null) {
320+
this.writerSupplier = null;
321+
}
322+
}
323+
324+
public void setDeferredWriter(Supplier<TypeScriptWriter> writerSupplier) {
325+
this.writerSupplier = writerSupplier;
326+
if (writerSupplier != null) {
327+
this.writer = null;
328+
}
314329
}
315330

316331
public List<TypeScriptIntegration> getIntegrations() {
@@ -336,6 +351,7 @@ public GenerationContext copy() {
336351
copy.setService(service);
337352
copy.setSymbolProvider(symbolProvider);
338353
copy.setWriter(writer);
354+
copy.setDeferredWriter(writerSupplier);
339355
copy.setIntegrations(integrations);
340356
copy.setProtocolName(protocolName);
341357
return copy;

0 commit comments

Comments
 (0)