Skip to content

Commit e519b87

Browse files
authored
Merge pull request #170 from SentryMan/static
Static Processor Context
2 parents 115187f + 8e80643 commit e519b87

File tree

24 files changed

+190
-205
lines changed

24 files changed

+190
-205
lines changed

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.avaje.http.generator.client;
22

3+
import static io.avaje.http.generator.core.ProcessingContext.*;
34
import io.avaje.http.generator.core.*;
45

56
import javax.lang.model.element.TypeElement;
@@ -20,18 +21,16 @@ class ClientMethodWriter {
2021
private final MethodReader method;
2122
private final Append writer;
2223
private final WebMethod webMethod;
23-
private final ProcessingContext ctx;
2424
private final UType returnType;
2525
private MethodParam bodyHandlerParam;
2626
private String methodGenericParams = "";
2727
private final boolean useJsonb;
2828
private final Optional<RequestTimeoutPrism> timeout;
2929

30-
ClientMethodWriter(MethodReader method, Append writer, ProcessingContext ctx, boolean useJsonb) {
30+
ClientMethodWriter(MethodReader method, Append writer, boolean useJsonb) {
3131
this.method = method;
3232
this.writer = writer;
3333
this.webMethod = method.webMethod();
34-
this.ctx = ctx;
3534
this.returnType = Util.parseType(method.returnType());
3635
this.useJsonb = useJsonb;
3736
this.timeout = method.timeout();
@@ -215,8 +214,8 @@ private void writeBeanParams(PathSegments segments) {
215214
ParamType paramType = param.paramType();
216215
PathSegments.Segment segment = segments.segment(varName);
217216
if (segment == null && paramType == ParamType.BEANPARAM) {
218-
TypeElement formBeanType = ctx.typeElement(param.rawType());
219-
BeanParamReader form = new BeanParamReader(ctx, formBeanType, param.name(), param.shortType(), ParamType.QUERYPARAM);
217+
TypeElement formBeanType = typeElement(param.rawType());
218+
BeanParamReader form = new BeanParamReader(formBeanType, param.name(), param.shortType(), ParamType.QUERYPARAM);
220219
form.writeFormParams(writer);
221220
}
222221
}
@@ -242,8 +241,8 @@ private void writeFormParam(MethodParam param, ParamType paramType) {
242241
writer.append(" .formParam(\"%s\", %s)", param.paramName(), param.name()).eol();
243242
}
244243
} else if (paramType == ParamType.FORM) {
245-
TypeElement formBeanType = ctx.typeElement(param.rawType());
246-
BeanParamReader form = new BeanParamReader(ctx, formBeanType, param.name(), param.shortType(), ParamType.FORMPARAM);
244+
TypeElement formBeanType = typeElement(param.rawType());
245+
BeanParamReader form = new BeanParamReader(formBeanType, param.name(), param.shortType(), ParamType.FORMPARAM);
247246
form.writeFormParams(writer);
248247
}
249248
}

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientProcessor.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.avaje.http.generator.client;
22

3+
import static io.avaje.http.generator.core.ProcessingContext.*;
34
import java.io.IOException;
45
import java.io.Writer;
56
import java.util.LinkedHashSet;
@@ -28,8 +29,6 @@ public class ClientProcessor extends AbstractProcessor {
2829

2930
private final Set<String> generatedClients = new LinkedHashSet<>();
3031

31-
protected ProcessingContext ctx;
32-
3332
private final boolean useJsonB;
3433

3534
public ClientProcessor() {
@@ -49,17 +48,17 @@ public SourceVersion getSupportedSourceVersion() {
4948
public synchronized void init(ProcessingEnvironment processingEnv) {
5049
super.init(processingEnv);
5150
this.processingEnv = processingEnv;
52-
this.ctx = new ProcessingContext(processingEnv, new ClientPlatformAdapter());
51+
ProcessingContext.init(processingEnv, new ClientPlatformAdapter());
5352
}
5453

5554
@Override
5655
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment round) {
5756
for (final Element controller :
58-
round.getElementsAnnotatedWith(ctx.typeElement(ClientPrism.PRISM_TYPE))) {
57+
round.getElementsAnnotatedWith(typeElement(ClientPrism.PRISM_TYPE))) {
5958
writeClient(controller);
6059
}
6160
for (final Element importedElement :
62-
round.getElementsAnnotatedWith(ctx.typeElement(ImportPrism.PRISM_TYPE))) {
61+
round.getElementsAnnotatedWith(typeElement(ImportPrism.PRISM_TYPE))) {
6362
writeForImported(importedElement);
6463
}
6564
if (round.processingOver()) {
@@ -70,40 +69,40 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
7069

7170
private void writeServicesFile() {
7271
try {
73-
final FileObject metaInfWriter = ctx.createMetaInfWriter(METAINF_SERVICES_PROVIDER);
72+
final FileObject metaInfWriter = createMetaInfWriter(METAINF_SERVICES_PROVIDER);
7473
final Writer writer = metaInfWriter.openWriter();
7574
for (String generatedClient : generatedClients) {
7675
writer.append(generatedClient).append("$Provider\n");
7776
}
7877
writer.close();
7978
} catch (IOException e) {
80-
ctx.logError(null, "Error writing services file " + e, e);
79+
logError(null, "Error writing services file " + e, e);
8180
}
8281
}
8382

8483
private void writeForImported(Element importedElement) {
8584

8685
ImportPrism.getInstanceOn(importedElement).types().stream()
87-
.map(ctx::asElement)
86+
.map(ProcessingContext::asElement)
8887
.filter(Objects::nonNull)
8988
.forEach(this::writeClient);
9089
}
9190

9291
private void writeClient(Element controller) {
9392
if (controller instanceof TypeElement) {
94-
ControllerReader reader = new ControllerReader((TypeElement) controller, ctx);
93+
ControllerReader reader = new ControllerReader((TypeElement) controller);
9594
reader.read(false);
9695
try {
97-
generatedClients.add(writeClientAdapter(ctx, reader));
96+
generatedClients.add(writeClientAdapter(reader));
9897
} catch (Throwable e) {
9998
e.printStackTrace();
100-
ctx.logError(reader.beanType(), "Failed to write client class " + e);
99+
logError(reader.beanType(), "Failed to write client class " + e);
101100
}
102-
}
101+
}
103102
}
104103

105-
protected String writeClientAdapter(ProcessingContext ctx, ControllerReader reader) throws IOException {
106-
return new ClientWriter(reader, ctx, useJsonB).write();
104+
protected String writeClientAdapter(ControllerReader reader) throws IOException {
105+
return new ClientWriter(reader, useJsonB).write();
107106
}
108107

109108
}

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientWriter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ class ClientWriter extends BaseControllerWriter {
2323
private final List<ClientMethodWriter> methodList = new ArrayList<>();
2424
private final boolean useJsonb;
2525

26-
ClientWriter(ControllerReader reader, ProcessingContext ctx, boolean useJsonB) throws IOException {
27-
super(reader, ctx, SUFFIX);
26+
ClientWriter(ControllerReader reader, boolean useJsonB) throws IOException {
27+
super(reader, SUFFIX);
2828
reader.addImportType(HTTP_CLIENT);
2929
reader.addImportType(HTTP_API_PROVIDER);
3030
this.useJsonb = useJsonB;
@@ -41,7 +41,7 @@ protected String initPackageName(String originName) {
4141
private void readMethods() {
4242
for (MethodReader method : reader.methods()) {
4343
if (method.isWebMethod()) {
44-
final var methodWriter = new ClientMethodWriter(method, writer, ctx, useJsonb);
44+
final var methodWriter = new ClientMethodWriter(method, writer, useJsonb);
4545
methodWriter.addImportTypes(reader);
4646
methodList.add(methodWriter);
4747
}

http-generator-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<dependency>
1616
<groupId>io.avaje</groupId>
1717
<artifactId>avaje-prisms</artifactId>
18-
<version>1.4</version>
18+
<version>1.5</version>
1919
<optional>true</optional>
2020
<scope>provided</scope>
2121
</dependency>
@@ -83,7 +83,7 @@
8383
<path>
8484
<groupId>io.avaje</groupId>
8585
<artifactId>avaje-prisms</artifactId>
86-
<version>1.4</version>
86+
<version>1.5</version>
8787
</path>
8888
</annotationProcessorPaths>
8989
</configuration>

http-generator-core/src/main/java/io/avaje/http/generator/core/BaseControllerWriter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.avaje.http.generator.core;
22

3+
import static io.avaje.http.generator.core.ProcessingContext.*;
34
import javax.lang.model.element.TypeElement;
45
import javax.tools.JavaFileObject;
56
import java.io.IOException;
@@ -11,21 +12,19 @@
1112
public abstract class BaseControllerWriter {
1213

1314
protected final ControllerReader reader;
14-
protected final ProcessingContext ctx;
1515
protected final String originName;
1616
protected final String shortName;
1717
protected final String fullName;
1818
protected final String packageName;
1919
protected final boolean router;
2020
protected Append writer;
2121

22-
protected BaseControllerWriter(ControllerReader reader, ProcessingContext ctx) throws IOException {
23-
this(reader, ctx, "$Route");
22+
protected BaseControllerWriter(ControllerReader reader) throws IOException {
23+
this(reader, "$Route");
2424
}
2525

26-
protected BaseControllerWriter(ControllerReader reader, ProcessingContext ctx, String suffix) throws IOException {
26+
protected BaseControllerWriter(ControllerReader reader, String suffix) throws IOException {
2727
this.reader = reader;
28-
this.ctx = ctx;
2928
this.router = "$Route".equals(suffix);
3029
TypeElement origin = reader.beanType();
3130
this.originName = origin.getQualifiedName().toString();
@@ -50,7 +49,7 @@ protected void initWriter() throws IOException {
5049
}
5150

5251
protected Writer createFileWriter() throws IOException {
53-
JavaFileObject jfo = ctx.createWriter(fullName, reader.beanType());
52+
JavaFileObject jfo = createWriter(fullName, reader.beanType());
5453
return jfo.openWriter();
5554
}
5655

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.avaje.http.generator.core;
22

3+
import static io.avaje.http.generator.core.ProcessingContext.*;
34
import java.io.IOException;
45
import java.util.Set;
56
import javax.annotation.processing.AbstractProcessor;
@@ -13,7 +14,6 @@
1314
@SupportedOptions({"useJavax", "useSingleton"})
1415
public abstract class BaseProcessor extends AbstractProcessor {
1516

16-
protected ProcessingContext ctx;
1717

1818
@Override
1919
public SourceVersion getSupportedSourceVersion() {
@@ -28,7 +28,7 @@ public Set<String> getSupportedAnnotationTypes() {
2828
@Override
2929
public synchronized void init(ProcessingEnvironment processingEnv) {
3030
super.init(processingEnv);
31-
this.ctx = new ProcessingContext(processingEnv, providePlatformAdapter());
31+
ProcessingContext.init(processingEnv, providePlatformAdapter());
3232
}
3333

3434
/** Provide the platform specific adapter to use for Javalin, Helidon etc. */
@@ -37,16 +37,16 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
3737
@Override
3838
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment round) {
3939

40-
if (ctx.isOpenApiAvailable()) {
40+
if (isOpenApiAvailable()) {
4141
readOpenApiDefinition(round);
4242
readTagDefinitions(round);
4343
readSecuritySchemes(round);
4444
}
4545

4646
final Set<? extends Element> controllers =
47-
round.getElementsAnnotatedWith(ctx.typeElement(ControllerPrism.PRISM_TYPE));
47+
round.getElementsAnnotatedWith(typeElement(ControllerPrism.PRISM_TYPE));
4848
for (Element controller : controllers) {
49-
writeControllerAdapter(controller);
49+
writeAdapter(controller);
5050
}
5151

5252
if (round.processingOver()) {
@@ -57,57 +57,57 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
5757

5858
private void readOpenApiDefinition(RoundEnvironment round) {
5959
final Set<? extends Element> elements =
60-
round.getElementsAnnotatedWith(ctx.typeElement(OpenAPIDefinitionPrism.PRISM_TYPE));
60+
round.getElementsAnnotatedWith(typeElement(OpenAPIDefinitionPrism.PRISM_TYPE));
6161
for (Element element : elements) {
62-
ctx.doc().readApiDefinition(element);
62+
doc().readApiDefinition(element);
6363
}
6464
}
6565

6666
private void readTagDefinitions(RoundEnvironment round) {
6767
Set<? extends Element> elements =
68-
round.getElementsAnnotatedWith(ctx.typeElement(TagPrism.PRISM_TYPE));
68+
round.getElementsAnnotatedWith(typeElement(TagPrism.PRISM_TYPE));
6969
for (Element element : elements) {
70-
ctx.doc().addTagDefinition(element);
70+
doc().addTagDefinition(element);
7171
}
7272

73-
elements = round.getElementsAnnotatedWith(ctx.typeElement(TagsPrism.PRISM_TYPE));
73+
elements = round.getElementsAnnotatedWith(typeElement(TagsPrism.PRISM_TYPE));
7474
for (Element element : elements) {
75-
ctx.doc().addTagsDefinition(element);
75+
doc().addTagsDefinition(element);
7676
}
7777
}
7878

7979
private void readSecuritySchemes(RoundEnvironment round) {
80-
Set<? extends Element> elements = round.getElementsAnnotatedWith(ctx.typeElement(SecuritySchemePrism.PRISM_TYPE));
80+
Set<? extends Element> elements = round.getElementsAnnotatedWith(typeElement(SecuritySchemePrism.PRISM_TYPE));
8181
for (Element element : elements) {
82-
ctx.doc().addSecurityScheme(element);
82+
doc().addSecurityScheme(element);
8383
}
8484

85-
elements = round.getElementsAnnotatedWith(ctx.typeElement(SecuritySchemesPrism.PRISM_TYPE));
85+
elements = round.getElementsAnnotatedWith(typeElement(SecuritySchemesPrism.PRISM_TYPE));
8686
for (Element element : elements) {
87-
ctx.doc().addSecuritySchemes(element);
87+
doc().addSecuritySchemes(element);
8888
}
8989
}
9090

9191
private void writeOpenAPI() {
92-
ctx.doc().writeApi();
92+
doc().writeApi();
9393
}
9494

95-
private void writeControllerAdapter(Element controller) {
95+
private void writeAdapter(Element controller) {
9696
if (controller instanceof TypeElement) {
97-
ControllerReader reader = new ControllerReader((TypeElement) controller, ctx);
97+
ControllerReader reader = new ControllerReader((TypeElement) controller);
9898
reader.read(true);
9999
try {
100-
writeControllerAdapter(ctx, reader);
100+
writeControllerAdapter(reader);
101101
} catch (Throwable e) {
102102
e.printStackTrace();
103-
ctx.logError(reader.beanType(), "Failed to write $Route class " + e);
103+
logError(reader.beanType(), "Failed to write $Route class " + e);
104104
}
105105
}
106106
}
107107

108108
/**
109109
* Write the adapter code for the given controller.
110110
*/
111-
public abstract void writeControllerAdapter(ProcessingContext ctx, ControllerReader reader) throws IOException;
111+
public abstract void writeControllerAdapter(ControllerReader reader) throws IOException;
112112

113113
}

http-generator-core/src/main/java/io/avaje/http/generator/core/BeanParamReader.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.avaje.http.generator.core;
22

3+
import static io.avaje.http.generator.core.ProcessingContext.*;
34
import javax.lang.model.element.*;
45
import java.util.*;
56

67
public class BeanParamReader {
78

8-
private final ProcessingContext ctx;
99
private final String beanVarName;
1010
private final String beanShortType;
1111
private final TypeElement beanType;
@@ -15,8 +15,7 @@ public class BeanParamReader {
1515
private final List<ExecutableElement> constructors = new ArrayList<>();
1616
private final Map<String, ExecutableElement> methodMap = new LinkedHashMap<>();
1717

18-
public BeanParamReader(ProcessingContext ctx, TypeElement beanType, String beanVarName, String beanShortType, ParamType defaultParamType) {
19-
this.ctx = ctx;
18+
public BeanParamReader(TypeElement beanType, String beanVarName, String beanShortType, ParamType defaultParamType) {
2019
this.beanType = beanType;
2120
this.beanVarName = beanVarName;
2221
this.beanShortType = beanShortType;
@@ -41,7 +40,7 @@ private void read() {
4140
}
4241

4342
private void readField(Element enclosedElement) {
44-
FieldReader field = new FieldReader(ctx, enclosedElement, defaultParamType);
43+
FieldReader field = new FieldReader(enclosedElement, defaultParamType);
4544
fieldMap.put(field.varName(), field);
4645
}
4746

@@ -141,14 +140,12 @@ private ExecutableElement findGetter(String varName) {
141140

142141
static class FieldReader {
143142

144-
private final ProcessingContext ctx;
145143
private final ElementReader element;
146144
private String setterMethod;
147145
private boolean constructorParam;
148146

149-
FieldReader(ProcessingContext ctx, Element enclosedElement, ParamType defaultParamType) {
150-
this.ctx = ctx;
151-
this.element = new ElementReader(enclosedElement, ctx, defaultParamType, false);
147+
FieldReader(Element enclosedElement, ParamType defaultParamType) {
148+
this.element = new ElementReader(enclosedElement, defaultParamType, false);
152149
}
153150

154151
boolean isPublic() {
@@ -181,13 +178,13 @@ boolean isConstructorParam() {
181178
void writeSet(Append writer, String beanVarName) {
182179
if (setterMethod != null) {
183180
// populate via setter method
184-
writer.append("%s %s.%s(", ctx.platform().indent(), beanVarName, setterMethod);
181+
writer.append("%s %s.%s(", platform().indent(), beanVarName, setterMethod);
185182
element.setValue(writer);
186183
writer.append(");").eol();
187184

188185
} else {
189186
// populate via field put
190-
writer.append("%s %s.%s = ", ctx.platform().indent(), beanVarName, varName());
187+
writer.append("%s %s.%s = ", platform().indent(), beanVarName, varName());
191188
element.setValue(writer);
192189
writer.append(";").eol();
193190
}

0 commit comments

Comments
 (0)