Skip to content

Commit 6e0db66

Browse files
authored
ThreadLocal Context (#183)
* ThreadLocal * Update pom.xml * Update ProcessingContext.java * Update ProcessingContext.java
1 parent c26ebf1 commit 6e0db66

File tree

2 files changed

+61
-59
lines changed

2 files changed

+61
-59
lines changed

http-generator-core/pom.xml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@
99

1010
<artifactId>avaje-http-generator-core</artifactId>
1111

12+
<properties>
13+
<avaje.prisms.version>1.6</avaje.prisms.version>
14+
</properties>
1215
<dependencies>
1316
<dependency>
1417
<groupId>io.avaje</groupId>
1518
<artifactId>avaje-prisms</artifactId>
16-
<version>1.6</version>
19+
<version>${avaje.prisms.version}</version>
1720
<optional>true</optional>
1821
<scope>provided</scope>
1922
</dependency>
2023

2124
<dependency>
2225
<groupId>io.avaje</groupId>
2326
<artifactId>avaje-http-api</artifactId>
24-
<version>1.31-SNAPSHOT</version>
27+
<version>${project.version}</version>
2528
<optional>true</optional>
2629
<scope>provided</scope>
2730
</dependency>
@@ -81,7 +84,7 @@
8184
<path>
8285
<groupId>io.avaje</groupId>
8386
<artifactId>avaje-prisms</artifactId>
84-
<version>1.6</version>
87+
<version>${avaje.prisms.version}</version>
8588
</path>
8689
</annotationProcessorPaths>
8790
</configuration>

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

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -25,49 +25,50 @@
2525

2626
public class ProcessingContext {
2727

28-
private static PlatformAdapter readAdapter;
29-
private static Messager messager;
30-
private static Filer filer;
31-
private static Elements elements;
32-
private static Types types;
33-
private static boolean openApiAvailable;
34-
private static DocContext docContext;
35-
private static boolean useComponent;
36-
private static boolean useJavax;
37-
private static String diAnnotation;
28+
private static ThreadLocal<PlatformAdapter> READ_ADAPTER = new ThreadLocal<>();
29+
private static ThreadLocal<Messager> MESSAGER = new ThreadLocal<>();
30+
private static ThreadLocal<Filer> FILER = new ThreadLocal<>();
31+
private static ThreadLocal<Elements> ELEMENTS = new ThreadLocal<>();
32+
private static ThreadLocal<Types> TYPES = new ThreadLocal<>();
33+
private static ThreadLocal<Boolean> OPENAPI_AVAILABLE = ThreadLocal.withInitial(() -> false);
34+
private static ThreadLocal<DocContext> DOC_CONTEXT = new ThreadLocal<>();
35+
private static ThreadLocal<Boolean> USE_COMPONENT = ThreadLocal.withInitial(() -> false);
36+
private static ThreadLocal<Boolean> USE_JAVAX = ThreadLocal.withInitial(() -> false);
37+
private static ThreadLocal<String> DI_ANNOTATION = new ThreadLocal<>();
3838

3939
public static void init(ProcessingEnvironment env, PlatformAdapter adapter) {
4040
init(env, adapter, true);
4141
}
4242

43-
public static void init(ProcessingEnvironment env, PlatformAdapter adapter, boolean generateOpenAPI) {
44-
readAdapter = adapter;
45-
messager = env.getMessager();
46-
filer = env.getFiler();
47-
elements = env.getElementUtils();
48-
types = env.getTypeUtils();
43+
public static void init(
44+
ProcessingEnvironment env, PlatformAdapter adapter, boolean generateOpenAPI) {
45+
READ_ADAPTER.set(adapter);
46+
MESSAGER.set(env.getMessager());
47+
FILER.set(env.getFiler());
48+
ELEMENTS.set(env.getElementUtils());
49+
TYPES.set(env.getTypeUtils());
4950

5051
if (generateOpenAPI) {
51-
openApiAvailable = isTypeAvailable(Constants.OPENAPIDEFINITION);
52-
docContext = new DocContext(env, openApiAvailable);
52+
OPENAPI_AVAILABLE.set(isTypeAvailable(Constants.OPENAPIDEFINITION));
53+
DOC_CONTEXT.set(new DocContext(env, OPENAPI_AVAILABLE.get()));
5354
}
5455

5556
final var options = env.getOptions();
5657
final var singletonOverride = options.get("useSingleton");
5758
if (singletonOverride != null) {
58-
useComponent = !Boolean.parseBoolean(singletonOverride);
59+
USE_COMPONENT.set(!Boolean.parseBoolean(singletonOverride));
5960
} else {
60-
useComponent = isTypeAvailable(Constants.COMPONENT);
61+
USE_COMPONENT.set(isTypeAvailable(Constants.COMPONENT));
6162
}
62-
diAnnotation = useComponent ? "@Component" : "@Singleton";
63+
DI_ANNOTATION.set(USE_COMPONENT.get() ? "@Component" : "@Singleton");
6364

6465
final var javax = isTypeAvailable(Constants.SINGLETON_JAVAX);
6566
final var jakarta = isTypeAvailable(Constants.SINGLETON_JAKARTA);
6667
final var override = env.getOptions().get("useJavax");
6768
if (override != null || (javax && jakarta)) {
68-
useJavax = Boolean.parseBoolean(override);
69+
USE_JAVAX.set(Boolean.parseBoolean(override));
6970
} else {
70-
useJavax = javax;
71+
USE_JAVAX.set(javax);
7172
}
7273
}
7374

@@ -76,81 +77,79 @@ private static boolean isTypeAvailable(String canonicalName) {
7677
}
7778

7879
public static TypeElement typeElement(String canonicalName) {
79-
return elements.getTypeElement(canonicalName);
80+
return ELEMENTS.get().getTypeElement(canonicalName);
8081
}
8182

8283
public static boolean isOpenApiAvailable() {
83-
return openApiAvailable;
84+
return OPENAPI_AVAILABLE.get();
8485
}
8586

8687
public static boolean useJavax() {
87-
return useJavax;
88+
return USE_JAVAX.get();
8889
}
8990

9091
public static boolean useComponent() {
91-
return useComponent;
92+
return USE_COMPONENT.get();
9293
}
9394

9495
public static void logError(Element e, String msg, Object... args) {
95-
messager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e);
96+
MESSAGER.get().printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e);
9697
}
9798

98-
/**
99-
* Create a file writer for the given class name.
100-
*/
99+
/** Create a file writer for the given class name. */
101100
public static JavaFileObject createWriter(String cls, Element origin) throws IOException {
102-
return filer.createSourceFile(cls, origin);
101+
return FILER.get().createSourceFile(cls, origin);
103102
}
104103

105-
/**
106-
* Create a file writer for the META-INF services file.
107-
*/
104+
/** Create a file writer for the META-INF services file. */
108105
public static FileObject createMetaInfWriter(String target) throws IOException {
109-
return filer.createResource(StandardLocation.CLASS_OUTPUT, "", target);
106+
return FILER.get().createResource(StandardLocation.CLASS_OUTPUT, "", target);
110107
}
111108

112109
public static String docComment(Element param) {
113-
return elements.getDocComment(param);
110+
return ELEMENTS.get().getDocComment(param);
114111
}
115112

116113
public static DocContext doc() {
117-
return docContext;
114+
return DOC_CONTEXT.get();
118115
}
119116

120117
public static Element asElement(TypeMirror typeMirror) {
121-
return types.asElement(typeMirror);
118+
return TYPES.get().asElement(typeMirror);
122119
}
123120

124121
public static TypeMirror asMemberOf(DeclaredType declaredType, Element element) {
125-
return types.asMemberOf(declaredType, element);
122+
return TYPES.get().asMemberOf(declaredType, element);
126123
}
127124

128125
public static List<ExecutableElement> superMethods(Element element, String methodName) {
126+
final Types types = TYPES.get();
129127
return types.directSupertypes(element.asType()).stream()
130-
.filter(type -> !type.toString().contains("java.lang.Object"))
131-
.map(
132-
superType -> {
133-
final var superClass = (TypeElement) types.asElement(superType);
134-
for (final ExecutableElement method : ElementFilter.methodsIn(elements.getAllMembers(superClass))) {
135-
if (method.getSimpleName().contentEquals(methodName)) {
136-
return method;
137-
}
138-
}
139-
return null;
140-
})
141-
.filter(Objects::nonNull)
142-
.collect(Collectors.toList());
128+
.filter(type -> !type.toString().contains("java.lang.Object"))
129+
.map(
130+
superType -> {
131+
final var superClass = (TypeElement) types.asElement(superType);
132+
for (final ExecutableElement method :
133+
ElementFilter.methodsIn(ELEMENTS.get().getAllMembers(superClass))) {
134+
if (method.getSimpleName().contentEquals(methodName)) {
135+
return method;
136+
}
137+
}
138+
return null;
139+
})
140+
.filter(Objects::nonNull)
141+
.collect(Collectors.toList());
143142
}
144143

145144
public static PlatformAdapter platform() {
146-
return readAdapter;
145+
return READ_ADAPTER.get();
147146
}
148147

149148
public static void setPlatform(PlatformAdapter platform) {
150-
readAdapter = platform;
149+
READ_ADAPTER.set(platform);
151150
}
152151

153152
public static String diAnnotation() {
154-
return diAnnotation;
153+
return DI_ANNOTATION.get();
155154
}
156155
}

0 commit comments

Comments
 (0)