Files
2026-11-06 21:43:25 +05:30

84 lines
3.8 KiB
Bash

#!/usr/bin/env bash
# Regenerates every file in output/. Needs a JDK 25 and Maven 3.9+ on the PATH. Run from anywhere.
set -uo pipefail
cd "$(dirname "$0")/.."
ROOT="$PWD"
OUT="$ROOT/output"
mkdir -p "$OUT"
strip() { grep -v -E 'JAVA_TOOL_OPTIONS|^WARNING: (A terminally|sun\.misc|Please consider)' | sed "s#$ROOT/##g"; }
echo "[1/7] build + tests (writes output/09-processor-harness.txt)"
mvn -B -q clean test 2>&1 | strip | tail -5
# 10: surefire summaries
{ for f in processor/target/surefire-reports/*.txt demo/target/surefire-reports/*.txt; do cat "$f"; echo; done; } > "$OUT/10-tests.txt"
D=demo/src/main/java/com/ankurm/demo
CLS=demo/target/classes
PROC=processor/target/classes
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
echo "[2/7] reflection + retention demos"
java -cp "$CLS" com.ankurm.demo.RetentionDemo 2>&1 | strip > "$OUT/01-retention-reflection.txt"
java -cp "$CLS" com.ankurm.demo.RuntimeValidatorDemo 2>&1 | strip > "$OUT/02-runtime-validator.txt"
{
for c in 'RetentionDemo$Base'; do
echo "javap -v -p -cp demo/target/classes com.ankurm.demo.$c (filtered)"
javap -v -p -cp "$CLS" "com.ankurm.demo.$c" 2>&1 | grep -E 'Runtime(In)?[Vv]isibleAnnotations:|^ com\.ankurm'
echo "occurrences of SourceOnly in the class file: $(javap -v -p -cp "$CLS" "com.ankurm.demo.$c" 2>&1 | grep -c SourceOnly)"
done
} > "$OUT/03-javap-retention.txt"
echo "[3/7] generated source + builder usage"
cp demo/target/generated-sources/annotations/com/ankurm/demo/PersonBuilder.java "$OUT/04-generated-PersonBuilder.java.txt"
java -cp "$CLS" com.ankurm.demo.BuilderUsageDemo 2>&1 | strip > "$OUT/05-builder-usage.txt"
echo "[4/7] compile error via Messager"
{
echo '$ javac -processorpath processor/target/classes -d <tmp> bad/Shape.java'
javac -cp "$PROC" -processorpath "$PROC" -d "$TMP" bad/Shape.java 2>&1 | strip
echo "exit=${PIPESTATUS[0]}"
} > "$OUT/06-compile-error.txt"
{
echo '$ javac -cp demo/target/classes -d <tmp> bad/WrongTarget.java'
javac -cp "$CLS" -d "$TMP/t" bad/WrongTarget.java 2>&1 | strip
echo "exit=${PIPESTATUS[0]}"
} > "$OUT/11-wrong-target.txt"
echo "[5/7] JDK 25 and the processor on the classpath only"
S="$D/Person.java $D/Pizza.java $D/BuilderUsageDemo.java"
{
echo '$ javac -version'
javac -version 2>&1 | strip
echo
echo '$ javac -cp processor/target/classes -d <tmp> Person.java Pizza.java BuilderUsageDemo.java'
javac -cp "$PROC" -d "$TMP/a" $S 2>&1 | strip
echo "exit=${PIPESTATUS[0]}"
echo
echo '$ javac -Xlint:all -cp processor/target/classes -d <tmp> Person.java'
javac -Xlint:all -cp "$PROC" -d "$TMP/b" "$D/Person.java" 2>&1 | strip
echo "exit=${PIPESTATUS[0]} (no output at all: nothing warned that a processor was skipped)"
echo
echo '$ javac -cp processor/target/classes -proc:full -d <tmp> Person.java Pizza.java BuilderUsageDemo.java'
javac -cp "$PROC" -proc:full -d "$TMP/c" $S 2>&1 | strip
echo "exit=${PIPESTATUS[0]}"
echo
echo '$ javac -cp processor/target/classes -processorpath processor/target/classes -d <tmp> Person.java Pizza.java BuilderUsageDemo.java'
javac -cp "$PROC" -processorpath "$PROC" -d "$TMP/d" $S 2>&1 | strip
echo "exit=${PIPESTATUS[0]}"
} > "$OUT/07-jdk25-proc-default.txt"
echo "[6/7] Maven: processor on the classpath only"
{
echo '$ mvn -B clean compile -Pclasspath-only # no annotationProcessorPaths'
mvn -B clean compile -Pclasspath-only 2>&1 | strip | grep -E 'Compiling|COMPILATION ERROR|^\[ERROR\] demo/|BUILD' | awk '!s[$0]++' | head -12
echo
echo '$ mvn -B clean compile -Pclasspath-proc-full # same, plus <proc>full</proc>'
mvn -B clean compile -Pclasspath-proc-full 2>&1 | strip | grep -E 'Compiling|COMPILATION ERROR|^\[ERROR\] demo/|BUILD' | awk '!s[$0]++' | head -12
} > "$OUT/08-maven-classpath-only.txt"
echo "[7/7] restore a normal build"
mvn -B -q clean test 2>&1 | strip | tail -5
echo "Done. output/ regenerated."