1.9 KiB
1.9 KiB
annotation-processor
Companion code for the ankurm.com post "Custom Annotations and Annotation Processors in Java:
Generate Code at Compile Time." A module of java-core-examples; itself a small two-module Maven build.
Versions this was built and tested against
| Component | Version |
|---|---|
| JDK | 25.0.5+8 (Temurin, LTS) |
| Maven | 3.9.11 |
| maven-compiler-plugin | 3.16.0 |
| maven-surefire-plugin | 3.6.1 |
| JUnit Jupiter | 6.1.3 |
Run it
export JAVA_HOME=/path/to/jdk-25
mvn -B clean test # from this directory: builds the processor, then the demo that uses it
scripts/run-all.sh # also regenerates every file in output/
Files
| Path | What it is |
|---|---|
processor/.../GenerateBuilder.java |
The annotation (SOURCE retention, TYPE target, two members with defaults) |
processor/.../BuilderProcessor.java |
The AbstractProcessor that writes <Type>Builder through Filer, reports problems through Messager |
processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor |
Registration |
processor/src/test/.../Compilation.java, ProcessorCompileTest.java |
In-memory javax.tools.JavaCompiler harness and its tests (writes output/09) |
demo/.../Person.java, Pizza.java |
Consumers of @GenerateBuilder (a record and a class) |
demo/.../annotations/* |
SOURCE / CLASS / RUNTIME annotations, @Inherited, @Repeatable, members and defaults |
demo/.../RetentionDemo.java, RuntimeValidatorDemo.java |
What reflection sees; a reflection-based validator |
demo/src/test/... |
Runtime tests of the generated builders and of the reflection behaviour |
bad/Shape.java |
Deliberately invalid input for the compile-error transcript |
output/01..10 |
Captured runs; the post quotes these verbatim |
demo/pom.xml has two throwaway profiles (classpath-only, classpath-proc-full) used only to capture
output/08.