Skip to content

Commit c834335

Browse files
committed
changed parsers to be more generic
1 parent c857c4e commit c834335

8 files changed

Lines changed: 215 additions & 164 deletions

File tree

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/PaginationCompilationTestParser.java renamed to tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CompilationTestParser.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,42 @@
77
import software.amazon.smithy.build.PluginContext;
88
import software.amazon.smithy.model.shapes.*;
99
import software.amazon.smithy.aws.traits.ServiceTrait;
10-
import com.amazonaws.util.awsclientsmithygenerator.generators.CppWriterDelegator;
11-
import com.amazonaws.util.awsclientsmithygenerator.generators.templates.PaginationCompilationTestGenerator;
12-
import com.amazonaws.util.awsclientsmithygenerator.generators.OperationData;
13-
import software.amazon.smithy.model.traits.PaginatedTrait;
10+
import com.amazonaws.util.awsclientsmithygenerator.generators.CppWriter;
1411
import java.util.*;
12+
import java.util.function.Consumer;
1513

16-
public class PaginationCompilationTestParser {
14+
public class CompilationTestParser<T> {
1715
private final PluginContext context;
1816
private final ServiceShape service;
19-
private final List<OperationData<PaginatedTrait>> paginatedOps;
17+
private final List<T> operations;
2018
private final CppWriterDelegator writerDelegator;
19+
private final String testType;
20+
private final Consumer<CppWriter> renderFunction;
2121

22-
public PaginationCompilationTestParser(PluginContext context, ServiceShape service, List<OperationData<PaginatedTrait>> paginatedOps) {
22+
public CompilationTestParser(PluginContext context, ServiceShape service, List<T> operations,
23+
String testType, Consumer<CppWriter> renderFunction) {
2324
this.context = context;
2425
this.service = service;
25-
this.paginatedOps = paginatedOps;
26+
this.operations = operations;
2627
this.writerDelegator = new CppWriterDelegator(context.getFileManifest());
28+
this.testType = testType;
29+
this.renderFunction = renderFunction;
2730
}
2831

2932
public void run() {
30-
List<ServiceShape> services = List.of(service);
31-
generateSingleHeaderCompilationTest(services, paginatedOps);
33+
generateCompilationTest();
3234
writerDelegator.flushWriters();
3335
}
3436

35-
private void generateSingleHeaderCompilationTest(List<ServiceShape> services, List<OperationData<PaginatedTrait>> allPaginatedOps) {
37+
private void generateCompilationTest() {
3638
String serviceName = getServiceName(service);
3739
String c2jServiceName = getC2jServiceName(service);
3840

39-
// Generate single compilation test for all pagination headers in service's client-gen-tests
4041
writerDelegator.useFileWriter(
41-
"generated/tests/" + c2jServiceName + "-gen-tests/" + serviceName + "PaginationCompilationTests.cpp",
42-
writer -> new PaginationCompilationTestGenerator(services, allPaginatedOps).render(writer)
42+
"generated/tests/" + c2jServiceName + "-gen-tests/" + serviceName + testType + "CompilationTests.cpp",
43+
renderFunction
4344
);
4445
}
45-
4646

4747
private String getServiceName(ServiceShape service) {
4848
return service.getTrait(ServiceTrait.class)

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppWriter.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,18 @@ public CppWriter() {
2828
});
2929
}
3030

31-
public void writeInclude(String header) {
31+
public CppWriter writeInclude(String header) {
3232
write("#include <$L>", header);
33+
return this;
3334
}
3435

35-
public void writeNamespaceOpen(String namespace) {
36+
public CppWriter writeNamespaceOpen(String namespace) {
3637
write("namespace $L\n{", namespace);
38+
return this;
3739
}
3840

39-
public void writeNamespaceClose(String namespace) {
41+
public CppWriter writeNamespaceClose(String namespace) {
4042
write("} // namespace $L", namespace);
43+
return this;
4144
}
4245
}

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/PaginationParser.java renamed to tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/FeatureParser.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,24 @@
1010
import software.amazon.smithy.model.node.ObjectNode;
1111
import software.amazon.smithy.model.shapes.*;
1212
import software.amazon.smithy.aws.traits.ServiceTrait;
13-
import com.amazonaws.util.awsclientsmithygenerator.generators.CppWriterDelegator;
14-
import com.amazonaws.util.awsclientsmithygenerator.generators.OperationData;
15-
import software.amazon.smithy.model.traits.PaginatedTrait;
16-
import com.amazonaws.util.awsclientsmithygenerator.generators.PaginationHeaderWriter;
17-
import com.amazonaws.util.awsclientsmithygenerator.generators.templates.PaginationClientTemplate;
1813
import java.util.*;
14+
import java.util.function.Consumer;
1915

20-
public class PaginationParser {
16+
public class FeatureParser<T> {
2117
private final PluginContext context;
2218
private final Model model;
2319
private final ServiceShape service;
24-
private final List<OperationData<PaginatedTrait>> paginatedOps;
20+
private final List<T> operations;
2521
private final CppWriterDelegator writerDelegator;
26-
private Map<String, String> c2jMap;
22+
private final Map<String, String> c2jMap;
23+
private final String featureName;
2724

28-
public PaginationParser(PluginContext context, ServiceShape service, List<OperationData<PaginatedTrait>> paginatedOps) {
25+
public FeatureParser(PluginContext context, ServiceShape service, List<T> operations, String featureName) {
2926
this.context = context;
3027
this.model = context.getModel();
3128
this.service = service;
32-
this.paginatedOps = paginatedOps;
29+
this.operations = operations;
30+
this.featureName = featureName;
3331
this.writerDelegator = new CppWriterDelegator(context.getFileManifest());
3432

3533
// Initialize c2j map
@@ -47,26 +45,28 @@ public PaginationParser(PluginContext context, ServiceShape service, List<Operat
4745
}
4846
}
4947

50-
public void run() {
51-
generatePaginationFiles(service, paginatedOps);
48+
public void run(Consumer<FeatureParser<T>> generationLogic) {
49+
generationLogic.accept(this);
5250
writerDelegator.flushWriters();
5351
}
5452

55-
private void generatePaginationFiles(ServiceShape service, List<OperationData<PaginatedTrait>> paginatedOps) {
53+
public void generateClientHeader(String fileName, Consumer<CppWriter> generator) {
5654
String serviceName = getServiceName(service);
5755
String c2jServiceName = getC2jServiceName(service);
5856

59-
// Generate client pagination header
6057
writerDelegator.useFileWriter(
61-
"include/aws/" + c2jServiceName + "/" + serviceName + "ClientPagination.h",
62-
writer -> new PaginationClientTemplate(service, paginatedOps).render(writer)
58+
"include/aws/" + c2jServiceName + "/" + fileName,
59+
generator
6360
);
64-
65-
// Generate pagination traits headers
66-
PaginationHeaderWriter headerWriter = new PaginationHeaderWriter(context, service, paginatedOps, c2jServiceName);
67-
headerWriter.write();
6861
}
6962

63+
public PluginContext getContext() { return context; }
64+
public ServiceShape getService() { return service; }
65+
public List<T> getOperations() { return operations; }
66+
public String getFeatureName() { return featureName; }
67+
public String getServiceName() { return getServiceName(service); }
68+
public String getC2jServiceName() { return getC2jServiceName(service); }
69+
7070
private String getServiceName(ServiceShape service) {
7171
return service.getTrait(ServiceTrait.class)
7272
.map(ServiceTrait::getSdkId)
@@ -85,4 +85,4 @@ private String getC2jServiceName(ServiceShape service) {
8585

8686
return c2jMap.getOrDefault(sdkId, sdkId);
8787
}
88-
}
88+
}

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/PaginationCodegenPlugin.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
import software.amazon.smithy.model.traits.PaginatedTrait;
1111
import software.amazon.smithy.model.shapes.*;
1212
import com.amazonaws.util.awsclientsmithygenerator.generators.OperationData;
13+
import com.amazonaws.util.awsclientsmithygenerator.generators.FeatureParser;
14+
import com.amazonaws.util.awsclientsmithygenerator.generators.templates.PaginationTraitsGenerator;
15+
import com.amazonaws.util.awsclientsmithygenerator.generators.templates.PaginationClientHeaderGenerator;
16+
import com.amazonaws.util.awsclientsmithygenerator.generators.templates.PaginationCompilationTestGenerator;
1317
import software.amazon.smithy.model.traits.PaginatedTrait;
14-
import com.amazonaws.util.awsclientsmithygenerator.generators.PaginationCompilationTestParser;
1518
import java.util.List;
1619
import java.util.stream.Collectors;
1720

@@ -35,12 +38,29 @@ public void execute(PluginContext context) {
3538

3639
if (!paginatedOps.isEmpty()) {
3740
// Generate pagination files
38-
PaginationParser parser = new PaginationParser(context, service, paginatedOps);
39-
parser.run();
41+
FeatureParser<OperationData<PaginatedTrait>> parser = new FeatureParser<>(context, service, paginatedOps, "Pagination");
42+
parser.run(featureParser -> {
43+
String serviceName = featureParser.getServiceName();
44+
45+
// Generate client pagination header
46+
featureParser.generateClientHeader(
47+
serviceName + "ClientPagination.h",
48+
writer -> new PaginationClientHeaderGenerator(featureParser.getService(), featureParser.getOperations()).render(writer)
49+
);
50+
51+
// Generate pagination traits headers
52+
PaginationTraitsGenerator headerWriter = new PaginationTraitsGenerator(
53+
featureParser.getContext(),
54+
featureParser.getService(),
55+
featureParser.getOperations(),
56+
featureParser.getC2jServiceName()
57+
);
58+
headerWriter.write();
59+
});
4060

4161
// Generate header compilation test
42-
PaginationCompilationTestParser headerParser = new PaginationCompilationTestParser(context, service, paginatedOps);
43-
headerParser.run();
62+
PaginationCompilationTestGenerator headerGenerator = new PaginationCompilationTestGenerator(context, service, paginatedOps);
63+
headerGenerator.run();
4464
}
4565
}
4666
}

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/PaginationHeaderWriter.java

Lines changed: 0 additions & 114 deletions
This file was deleted.

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/templates/PaginationClientTemplate.java renamed to tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/templates/PaginationClientHeaderGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import software.amazon.smithy.model.traits.PaginatedTrait;
1212
import java.util.List;
1313

14-
public class PaginationClientTemplate {
14+
public class PaginationClientHeaderGenerator {
1515
private final ServiceShape service;
1616
private final List<OperationData<PaginatedTrait>> paginatedOps;
1717

18-
public PaginationClientTemplate(ServiceShape service, List<OperationData<PaginatedTrait>> paginatedOps) {
18+
public PaginationClientHeaderGenerator(ServiceShape service, List<OperationData<PaginatedTrait>> paginatedOps) {
1919
this.service = service;
2020
this.paginatedOps = paginatedOps;
2121
}

tools/code-generation/smithy/codegen/cpp-pagination-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/templates/PaginationCompilationTestGenerator.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,37 @@
44
*/
55
package com.amazonaws.util.awsclientsmithygenerator.generators.templates;
66

7+
import software.amazon.smithy.build.PluginContext;
78
import software.amazon.smithy.model.shapes.*;
89
import com.amazonaws.util.awsclientsmithygenerator.generators.CppWriter;
10+
import com.amazonaws.util.awsclientsmithygenerator.generators.CompilationTestParser;
911
import com.amazonaws.util.awsclientsmithygenerator.generators.OperationData;
1012
import software.amazon.smithy.model.traits.PaginatedTrait;
1113
import java.util.*;
1214

1315
public class PaginationCompilationTestGenerator {
14-
private final List<ServiceShape> services;
16+
private final CompilationTestParser<OperationData<PaginatedTrait>> parser;
1517
private final List<OperationData<PaginatedTrait>> allPaginatedOps;
1618

17-
public PaginationCompilationTestGenerator(List<ServiceShape> services, List<OperationData<PaginatedTrait>> allPaginatedOps) {
18-
this.services = services;
19+
public PaginationCompilationTestGenerator(PluginContext context, ServiceShape service, List<OperationData<PaginatedTrait>> allPaginatedOps) {
1920
this.allPaginatedOps = allPaginatedOps;
21+
this.parser = new CompilationTestParser<>(
22+
context,
23+
service,
24+
allPaginatedOps,
25+
"Pagination",
26+
this::render
27+
);
28+
}
29+
30+
public void run() {
31+
parser.run();
2032
}
2133

2234
public void render(CppWriter writer) {
23-
String serviceName = getServiceName(services.get(0));
35+
// Get service from the first operation since all operations belong to the same service
36+
ServiceShape service = allPaginatedOps.get(0).getService();
37+
String serviceName = getServiceName(service);
2438

2539
writer.write("/**")
2640
.write(" * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.")
@@ -72,4 +86,5 @@ private String getServiceName(ServiceShape service) {
7286
.replace("-", "");
7387
}
7488

89+
7590
}

0 commit comments

Comments
 (0)