#!/usr/bin/env bash # Regenerates every file in output/. Needs JDK 25 as JAVA_HOME; JDK26_HOME (optional) adds the # JEP 500 comparison run. JMH takes a few minutes. set -euo pipefail cd "$(dirname "$0")/.." mvn -q package # env -u keeps the sandbox's JAVA_TOOL_OPTIONS banner out of committed output. J() { env -u JAVA_TOOL_OPTIONS "$JAVA_HOME/bin/java" "$@"; } echo "--- 01: basics ---" { echo '$ java -cp target/classes com.ankurm.reflection.ReflectionBasicsDemo'; echo J -cp target/classes com.ankurm.reflection.ReflectionBasicsDemo 2>&1; } > output/01-basics.txt echo "--- 02: module rules ---" { echo '$ java -cp target/classes com.ankurm.reflection.ModuleRulesDemo'; echo J -cp target/classes com.ankurm.reflection.ModuleRulesDemo 2>&1 echo; echo '$ java --add-opens java.base/java.lang=ALL-UNNAMED -cp target/classes com.ankurm.reflection.ModuleRulesDemo'; echo J --add-opens java.base/java.lang=ALL-UNNAMED -cp target/classes com.ankurm.reflection.ModuleRulesDemo 2>&1; } > output/02-module-rules.txt echo "--- 03: final fields (JDK 25, and JDK 26 if JDK26_HOME is set) ---" { echo '$ java -cp target/classes com.ankurm.reflection.FinalFieldDemo # JDK 25'; echo J -cp target/classes com.ankurm.reflection.FinalFieldDemo 2>&1 if [ -n "${JDK26_HOME:-}" ]; then echo; echo '$ java -cp target/classes com.ankurm.reflection.FinalFieldDemo # JDK 26'; echo env -u JAVA_TOOL_OPTIONS "$JDK26_HOME/bin/java" -cp target/classes com.ankurm.reflection.FinalFieldDemo 2>&1 echo; echo '$ java --illegal-final-field-mutation=deny -cp target/classes com.ankurm.reflection.FinalFieldDemo # JDK 26'; echo env -u JAVA_TOOL_OPTIONS "$JDK26_HOME/bin/java" --illegal-final-field-mutation=deny -cp target/classes com.ankurm.reflection.FinalFieldDemo 2>&1 || true fi; } > output/03-final-fields.txt echo "--- 04: method handles ---" { echo '$ java -cp target/classes com.ankurm.reflection.MethodHandlesDemo'; echo J -cp target/classes com.ankurm.reflection.MethodHandlesDemo 2>&1; } > output/04-method-handles.txt echo "--- 05: JMH call cost (a few minutes) ---" J -jar target/benchmarks.jar CallBenchmark -rf text -rff /tmp/jmh-reflection.txt > /tmp/jmh-reflection.log 2>&1 { echo '$ java -jar target/benchmarks.jar CallBenchmark'; echo J -version 2>&1 | head -1 echo; grep -A20 '^Benchmark ' /tmp/jmh-reflection.log | grep -v 'Benchmark result is saved'; } > output/05-call-benchmark.txt echo "--- 06: single-file quick start ---" { echo '$ java src/main/java/com/ankurm/reflection/QuickStart.java'; echo J src/main/java/com/ankurm/reflection/QuickStart.java 2>&1; } > output/06-quickstart.txt echo done