Skip to content

Commit 175d98a

Browse files
authored
Prisms 2.0 Module Validation (#684)
1 parent 2bbfcf3 commit 175d98a

File tree

4 files changed

+45
-19
lines changed

4 files changed

+45
-19
lines changed

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
import static io.avaje.http.generator.core.ProcessingContext.platform;
66
import static io.avaje.http.generator.core.ProcessingContext.setPlatform;
77
import static io.avaje.http.generator.core.ProcessingContext.typeElement;
8+
import static java.util.stream.Collectors.joining;
89

910
import java.io.IOException;
11+
import java.nio.file.Files;
12+
import java.nio.file.StandardOpenOption;
1013
import java.util.HashMap;
1114
import java.util.Map;
1215
import java.util.Objects;
1316
import java.util.Set;
17+
import java.util.stream.Stream;
1418

1519
import javax.annotation.processing.AbstractProcessor;
1620
import javax.annotation.processing.ProcessingEnvironment;
@@ -54,11 +58,32 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
5458
APContext.init(processingEnv);
5559
ProcessingContext.init(processingEnv, new ClientPlatformAdapter(), false);
5660
this.componentWriter = new SimpleComponentWriter(metaData);
61+
62+
try {
63+
var file = APContext.getBuildResource("avaje-processors.txt");
64+
var addition = new StringBuilder();
65+
if (file.toFile().exists()) {
66+
var result =
67+
Stream.concat(Files.lines(file), Stream.of("avaje-http-client-generator"))
68+
.distinct()
69+
.collect(joining("\n"));
70+
addition.append(result);
71+
} else {
72+
addition.append("avaje-http-client-generator");
73+
}
74+
Files.writeString(file, addition, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
75+
76+
} catch (IOException e) {
77+
// not an issue worth failing over
78+
}
5779
}
5880

5981
@Override
6082
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment round) {
6183
if (generateComponent || round.errorRaised()) {
84+
if (round.processingOver()) {
85+
ProcessingContext.validateModule();
86+
}
6287
return false;
6388
}
6489
generateComponent = rounds++ > 0;
@@ -143,7 +168,6 @@ private void writeComponent(boolean processingOver) {
143168
writer.write();
144169
}
145170
writeMetaInf();
146-
ProcessingContext.validateModule();
147171
} catch (final IOException e) {
148172
logError("Error writing component", e);
149173
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@
2525

2626
import io.avaje.http.generator.core.TypeMap.CustomHandler;
2727
import io.avaje.prism.GenerateAPContext;
28-
import io.avaje.prism.GenerateModuleInfoReader;
2928

3029
@GenerateAPContext
31-
@GenerateModuleInfoReader
3230
@SupportedOptions({
3331
"useJavax",
3432
"useSingleton",

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -246,21 +246,25 @@ static Stream<String> superTypes(Element element) {
246246

247247
public static void validateModule() {
248248
var module = APContext.getProjectModuleElement();
249-
if (module != null && !module.isUnnamed()) {
250-
try (var bufferedReader = APContext.getModuleInfoReader()) {
251-
var reader = new ModuleInfoReader(module, bufferedReader);
252-
reader.requires().forEach(r -> {
253-
if (!r.isStatic() && r.getDependency().getQualifiedName().contentEquals("io.avaje.http.api.javalin")) {
254-
logWarn(module, "io.avaje.http.api.javalin only contains SOURCE retention annotations. It should added as `requires static`");
255-
}
256-
});
257-
258-
reader.validateServices("io.avaje.http.client.HttpClient.GeneratedComponent", CTX.get().clientFQN);
259-
260-
} catch (Exception e) {
261-
// can't read module
262-
}
263-
}
249+
APContext.moduleInfoReader()
250+
.ifPresent(
251+
moduleInfo -> {
252+
moduleInfo
253+
.requires()
254+
.forEach(
255+
r -> {
256+
if (!r.isStatic()
257+
&& r.getDependency()
258+
.getQualifiedName()
259+
.contentEquals("io.avaje.http.api.javalin")) {
260+
logWarn(
261+
module,
262+
"io.avaje.http.api.javalin only contains SOURCE retention annotations. It should added as `requires static`");
263+
}
264+
});
265+
moduleInfo.validateServices(
266+
"io.avaje.http.client.HttpClient.GeneratedComponent", CTX.get().clientFQN);
267+
});
264268
}
265269

266270
static ModuleElement getModuleElement(Element e) {

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<swagger.version>2.2.41</swagger.version>
2424
<jackson.version>2.14.2</jackson.version>
2525
<jex.version>3.0-RC10</jex.version>
26-
<avaje.prisms.version>1.44</avaje.prisms.version>
26+
<avaje.prisms.version>2.0-RC1</avaje.prisms.version>
2727
<project.build.outputTimestamp>2025-12-01T15:37:17Z</project.build.outputTimestamp>
2828
<module-info.shade>${project.build.directory}${file.separator}module-info.shade</module-info.shade>
2929
</properties>

0 commit comments

Comments
 (0)