Skip to content

Commit 88b4e8e

Browse files
committed
Refactor writeAdditionalFiles and writeAdditionalExports logic into integration.customize()
1 parent 86eb07a commit 88b4e8e

File tree

6 files changed

+49
-130
lines changed

6 files changed

+49
-130
lines changed

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

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.List;
2323
import java.util.Map;
2424
import java.util.Set;
25+
import java.util.function.BiConsumer;
26+
import java.util.function.Consumer;
2527
import java.util.logging.Logger;
2628
import java.util.stream.Collectors;
2729
import software.amazon.smithy.build.FileManifest;
@@ -404,24 +406,19 @@ public void customizeBeforeIntegrations(
404406
}
405407
}
406408

407-
// Write each custom file.
408-
for (TypeScriptIntegration integration : directive.context().integrations()) {
409-
LOGGER.finer(() -> "Calling writeAdditionalFiles on " + integration.getClass().getCanonicalName());
410-
integration.writeAdditionalFiles(
411-
directive.settings(),
412-
directive.model(),
413-
directive.symbolProvider(),
414-
directive.context().writerDelegator()::useFileWriter);
415-
}
416-
417409
// Generate index for client.
418-
IndexGenerator.writeIndex(
410+
BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory =
411+
directive.context().writerDelegator()::useFileWriter;
412+
413+
writerFactory.accept(Paths.get(CodegenUtils.SOURCE_FOLDER, "index.ts").toString(), writer -> {
414+
IndexGenerator.writeIndex(
419415
directive.settings(),
420416
directive.model(),
421417
directive.symbolProvider(),
422-
directive.fileManifest(),
423-
directive.context().integrations(),
424-
directive.context().protocolGenerator());
418+
directive.context().protocolGenerator(),
419+
writer
420+
);
421+
});
425422

426423
if (directive.settings().generateServerSdk()) {
427424
// Generate index for server

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

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import software.amazon.smithy.model.shapes.ServiceShape;
2828
import software.amazon.smithy.model.traits.PaginatedTrait;
2929
import software.amazon.smithy.typescript.codegen.integration.ProtocolGenerator;
30-
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
3130
import software.amazon.smithy.utils.SmithyInternalApi;
3231
import software.amazon.smithy.waiters.WaitableTrait;
3332

@@ -43,14 +42,11 @@ static void writeIndex(
4342
TypeScriptSettings settings,
4443
Model model,
4544
SymbolProvider symbolProvider,
46-
FileManifest fileManifest,
47-
List<TypeScriptIntegration> integrations,
48-
ProtocolGenerator protocolGenerator
45+
ProtocolGenerator protocolGenerator,
46+
TypeScriptWriter writer
4947
) {
50-
TypeScriptWriter writer = new TypeScriptWriter("");
51-
5248
if (settings.generateClient()) {
53-
writeClientExports(settings, model, symbolProvider, writer, fileManifest, integrations);
49+
writeClientExports(settings, model, symbolProvider, writer);
5450
}
5551

5652
if (settings.generateServerSdk() && protocolGenerator != null) {
@@ -60,13 +56,6 @@ static void writeIndex(
6056

6157
// write export statement for models
6258
writer.write("export * from \"./models\";");
63-
64-
// Write each custom export.
65-
for (TypeScriptIntegration integration : integrations) {
66-
integration.writeAdditionalExports(settings, model, symbolProvider, writer);
67-
}
68-
69-
fileManifest.writeFile(Paths.get(CodegenUtils.SOURCE_FOLDER, "index.ts").toString(), writer.toString());
7059
}
7160

7261
private static void writeProtocolExports(ProtocolGenerator protocolGenerator, TypeScriptWriter writer) {
@@ -97,9 +86,7 @@ private static void writeClientExports(
9786
TypeScriptSettings settings,
9887
Model model,
9988
SymbolProvider symbolProvider,
100-
TypeScriptWriter writer,
101-
FileManifest fileManifest,
102-
List<TypeScriptIntegration> integrations
89+
TypeScriptWriter writer
10390
) {
10491
ServiceShape service = settings.getService(model);
10592
Symbol symbol = symbolProvider.toSymbol(service);

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import software.amazon.smithy.model.shapes.ServiceShape;
2626
import software.amazon.smithy.model.traits.ErrorTrait;
2727
import software.amazon.smithy.typescript.codegen.CodegenUtils;
28+
import software.amazon.smithy.typescript.codegen.TypeScriptCodegenContext;
2829
import software.amazon.smithy.typescript.codegen.TypeScriptDependency;
2930
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
3031
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
@@ -37,7 +38,20 @@
3738
public final class AddBaseServiceExceptionClass implements TypeScriptIntegration {
3839

3940
@Override
40-
public void writeAdditionalFiles(
41+
public void customize(TypeScriptCodegenContext codegenContext) {
42+
TypeScriptSettings settings = codegenContext.settings();
43+
Model model = codegenContext.model();
44+
SymbolProvider symbolProvider = codegenContext.symbolProvider();
45+
BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory = codegenContext.writerDelegator()::useFileWriter;
46+
47+
writeAdditionalFiles(settings, model, symbolProvider, writerFactory);
48+
49+
writerFactory.accept(Paths.get(CodegenUtils.SOURCE_FOLDER, "index.ts").toString(), writer -> {
50+
writeAdditionalExports(settings, model, symbolProvider, writer);
51+
});
52+
}
53+
54+
private void writeAdditionalFiles(
4155
TypeScriptSettings settings,
4256
Model model,
4357
SymbolProvider symbolProvider,
@@ -67,8 +81,7 @@ public void writeAdditionalFiles(
6781
}
6882
}
6983

70-
@Override
71-
public void writeAdditionalExports(
84+
private void writeAdditionalExports(
7285
TypeScriptSettings settings,
7386
Model model,
7487
SymbolProvider symbolProvider,

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.function.Consumer;
2424
import software.amazon.smithy.codegen.core.Symbol;
2525
import software.amazon.smithy.codegen.core.SymbolDependency;
26-
import software.amazon.smithy.codegen.core.SymbolProvider;
2726
import software.amazon.smithy.model.Model;
2827
import software.amazon.smithy.model.knowledge.ServiceIndex;
2928
import software.amazon.smithy.model.knowledge.TopDownIndex;
@@ -32,6 +31,7 @@
3231
import software.amazon.smithy.model.traits.HttpApiKeyAuthTrait;
3332
import software.amazon.smithy.model.traits.OptionalAuthTrait;
3433
import software.amazon.smithy.typescript.codegen.CodegenUtils;
34+
import software.amazon.smithy.typescript.codegen.TypeScriptCodegenContext;
3535
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
3636
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
3737
import software.amazon.smithy.utils.IoUtils;
@@ -101,10 +101,21 @@ public List<RuntimeClientPlugin> getClientPlugins() {
101101
}
102102

103103
@Override
104-
public void writeAdditionalFiles(
104+
public void customize(TypeScriptCodegenContext codegenContext) {
105+
TypeScriptSettings settings = codegenContext.settings();
106+
Model model = codegenContext.model();
107+
BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory = codegenContext.writerDelegator()::useFileWriter;
108+
109+
writeAdditionalFiles(settings, model, writerFactory);
110+
111+
writerFactory.accept(Paths.get(CodegenUtils.SOURCE_FOLDER, "index.ts").toString(), writer -> {
112+
writeAdditionalExports(settings, model, writer);
113+
});
114+
}
115+
116+
private void writeAdditionalFiles(
105117
TypeScriptSettings settings,
106118
Model model,
107-
SymbolProvider symbolProvider,
108119
BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory
109120
) {
110121
ServiceShape service = settings.getService(model);
@@ -144,11 +155,9 @@ public void writeAdditionalFiles(
144155
});
145156
}
146157

147-
@Override
148-
public void writeAdditionalExports(
158+
private void writeAdditionalExports(
149159
TypeScriptSettings settings,
150160
Model model,
151-
SymbolProvider symbolProvider,
152161
TypeScriptWriter writer
153162
) {
154163
boolean isClientSdk = settings.generateClient();

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

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Collections;
1919
import java.util.List;
2020
import java.util.Map;
21-
import java.util.function.BiConsumer;
2221
import java.util.function.Consumer;
2322
import software.amazon.smithy.codegen.core.SmithyIntegration;
2423
import software.amazon.smithy.codegen.core.Symbol;
@@ -41,75 +40,6 @@
4140
public interface TypeScriptIntegration
4241
extends SmithyIntegration<TypeScriptSettings, TypeScriptWriter, TypeScriptCodegenContext> {
4342

44-
/**
45-
* Writes additional files.
46-
*
47-
* <pre>
48-
* {@code
49-
* public final class MyIntegration implements TypeScriptIntegration {
50-
* public writeAdditionalFiles(
51-
* TypeScriptSettings settings,
52-
* Model model,
53-
* SymbolProvider symbolProvider,
54-
* BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory
55-
* ) {
56-
* writerFactory.accept("foo.ts", writer -> {
57-
* writer.write("// Hello!");
58-
* });
59-
* }
60-
* }
61-
* }</pre>
62-
*
63-
* @param settings Settings used to generate.
64-
* @param model Model to generate from.
65-
* @param symbolProvider Symbol provider used for codegen.
66-
* @param writerFactory A factory function that takes the name of a file
67-
* to write and a {@code Consumer} that receives a
68-
* {@link TypeScriptWriter} to perform the actual writing to the file.
69-
*/
70-
default void writeAdditionalFiles(
71-
TypeScriptSettings settings,
72-
Model model,
73-
SymbolProvider symbolProvider,
74-
BiConsumer<String, Consumer<TypeScriptWriter>> writerFactory
75-
) {
76-
// pass
77-
}
78-
79-
/**
80-
* Write additional export statement to client root index.ts.
81-
* The files generated by {@link TypeScriptIntegration#writeAdditionalFiles}
82-
* can be exported with this method.
83-
*
84-
* <pre>
85-
* {@code
86-
* public final class MyIntegration implements TypeScriptIntegration {
87-
* public writeAdditionalExports(
88-
* TypeScriptSettings settings,
89-
* Model model,
90-
* SymbolProvider symbolProvider,
91-
* TypeScriptWriter writer
92-
* ) {
93-
* writer.write("export * from $S;", "./foo.ts");
94-
* }
95-
* }
96-
* }</pre>
97-
*
98-
* @param settings Settings used to generate.
99-
* @param model Model to generate from.
100-
* @param symbolProvider Symbol provider used for codegen.
101-
* @param writer TypeScript writer that works with the file.
102-
* @see #writeAdditionalFiles(TypeScriptSettings, Model, SymbolProvider, BiConsumer)
103-
*/
104-
default void writeAdditionalExports(
105-
TypeScriptSettings settings,
106-
Model model,
107-
SymbolProvider symbolProvider,
108-
TypeScriptWriter writer
109-
) {
110-
// pass
111-
}
112-
11343
/**
11444
* Gets a list of plugins to apply to the generated client.
11545
*

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/IndexGeneratorTest.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@
33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.containsString;
55

6-
import java.util.ArrayList;
7-
import java.util.List;
86
import org.junit.jupiter.api.Test;
9-
import software.amazon.smithy.build.MockManifest;
107
import software.amazon.smithy.codegen.core.SymbolProvider;
118
import software.amazon.smithy.model.Model;
129
import software.amazon.smithy.model.node.Node;
13-
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
1410

1511
public class IndexGeneratorTest {
1612

@@ -23,27 +19,14 @@ public void writesIndex() {
2319
.withMember("packageVersion", Node.from("1.0.0"))
2420
.build());
2521
SymbolProvider symbolProvider = new SymbolVisitor(model, settings);
26-
MockManifest manifest = new MockManifest();
27-
List<TypeScriptIntegration> integrations = new ArrayList<>();
28-
integrations.add(new TypeScriptIntegration() {
29-
@Override
30-
public void writeAdditionalExports(
31-
TypeScriptSettings settings,
32-
Model model,
33-
SymbolProvider symbolProvider,
34-
TypeScriptWriter writer
35-
) {
36-
writer.write("export * from $S;", "./foo");
37-
}
38-
});
22+
TypeScriptWriter writer = new TypeScriptWriter("");
3923

40-
IndexGenerator.writeIndex(settings, model, symbolProvider, manifest, integrations, null);
24+
IndexGenerator.writeIndex(settings, model, symbolProvider, null, writer);
4125

42-
String contents = manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/index.ts").get();
26+
String contents = writer.toString();
4327
assertThat(contents, containsString("export * from \"./Example\";"));
4428
assertThat(contents, containsString("export * from \"./ExampleClient\";"));
4529
assertThat(contents, containsString("export * from \"./commands\";"));
4630
assertThat(contents, containsString("export * from \"./models\";"));
47-
assertThat(contents, containsString("export * from \"./foo\";"));
4831
}
4932
}

0 commit comments

Comments
 (0)