#!/usr/bin/env bash # Regenerates every file in ../output/. Requires JDK25_HOME. set -euo pipefail [[ -z "${JDK25_HOME:-}" ]] && { echo "JDK25_HOME must be set" >&2; exit 1; } cd "$(dirname "$0")/.." OUT=output; mkdir -p "$OUT" export JAVA_HOME="$JDK25_HOME" mvn -q -f ../pom.xml -pl regex -am package J="$JDK25_HOME/bin/java" run() { echo "==> $1"; "$J" -cp target/classes "com.ankurm.regex.$1" 2>&1 | grep -v "Picked up" > "$OUT/$2"; } run BasicsDemo 01-basics.txt run LookaroundDemo 02-lookarounds.txt run ReplaceDemo 03-replace.txt run BlowupDemo 04-blowup.txt run FixesDemo 05-fixes.txt run LimitsDemo 06-limits.txt echo "==> JDK source: the backtracking mitigation and the absence of a timeout" { echo '$ java -version'; "$J" -version 2>&1 | grep -v "Picked up" echo echo '$ unzip -p lib/src.zip java.base/java/util/regex/Pattern.java | sed -n "/Optimize the greedy Loop/,/^ }$/p"' unzip -p "$JDK25_HOME/lib/src.zip" java.base/java/util/regex/Pattern.java | sed -n '/Optimize the greedy Loop/,/^ }$/p' echo echo '$ grep -ci timeout Pattern.java Matcher.java' for f in Pattern Matcher; do echo "$f.java: $(unzip -p "$JDK25_HOME/lib/src.zip" java.base/java/util/regex/$f.java | grep -ci timeout)"; done } > "$OUT/07-jdk-source.txt" cp target/surefire-reports/com.ankurm.regex.RegexClaimsTest.txt "$OUT/08-tests.txt" echo Done