29 lines
2.3 KiB
Bash
Executable File
29 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Java 17 features: every demo compiled and run on a real JDK 17 (and 11 for the encapsulation comparison); regenerates output/*.txt
|
|
# JDK11=/path JDK17=/path ./run.sh
|
|
set -uo pipefail
|
|
unset JAVA_TOOL_OPTIONS
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
JDK11="${JDK11:-/opt/jdks/jdk11}"; JDK17="${JDK17:-/opt/jdks/jdk17}"
|
|
OUT="$HERE/output"; mkdir -p "$OUT"; B="$(mktemp -d)"; trap 'rm -rf "$B"' EXIT
|
|
cd "$HERE"
|
|
ver() { "$1/bin/java" -version 2>&1 | sed -n 1p | sed 's/.*"\(.*\)".*/\1/'; }
|
|
cr() { local jdk="$1" src="$2" cls="$3" o; o="$(mktemp -d -p "$B")"
|
|
echo "\$ javac $src && java $cls ($(ver "$jdk"))"
|
|
"$jdk/bin/javac" ${JFLAGS:-} -encoding UTF-8 -d "$o" "$src" 2>&1 | grep -v '^Note:'; "$jdk/bin/java" -cp "$o" "$cls" 2>&1; }
|
|
co() { local jdk="$1" src="$2" o; o="$(mktemp -d -p "$B")"
|
|
echo "\$ javac $src ($(ver "$jdk"))"; local r; r="$("$jdk/bin/javac" -encoding UTF-8 -d "$o" "$src" 2>&1)"; if [ -n "$r" ]; then echo "$r"; else echo "(compiled cleanly)"; fi; }
|
|
cr "$JDK17" src/RecordsDemo.java RecordsDemo > "$OUT/01-records.txt"
|
|
cr "$JDK17" src/SealedDemo.java SealedDemo > "$OUT/02-sealed.txt"
|
|
cr "$JDK17" src/TextBlocksDemo.java TextBlocksDemo > "$OUT/03-text-blocks.txt"
|
|
cr "$JDK17" src/SwitchExprDemo.java SwitchExprDemo > "$OUT/04-switch-expressions.txt"
|
|
cr "$JDK17" src/PatternInstanceofDemo.java PatternInstanceofDemo > "$OUT/05-instanceof-pattern.txt"
|
|
JFLAGS=-g cr "$JDK17" src/HelpfulNpeDemo.java HelpfulNpeDemo > "$OUT/06-helpful-npe.txt"
|
|
{ cr "$JDK11" src/EncapsulationDemo.java EncapsulationDemo; echo; cr "$JDK17" src/EncapsulationDemo.java EncapsulationDemo
|
|
o="$(mktemp -d -p "$B")"; "$JDK17/bin/javac" -d "$o" src/EncapsulationDemo.java
|
|
echo; echo "\$ java --add-opens java.base/java.lang=ALL-UNNAMED EncapsulationDemo ($(ver "$JDK17"))"
|
|
"$JDK17/bin/java" --add-opens java.base/java.lang=ALL-UNNAMED -cp "$o" EncapsulationDemo 2>&1; } | sed -E 's#\(file:[^)]*\)#(file:/…/)#; s#unnamed module @[0-9a-f]+#unnamed module @<hash>#' > "$OUT/07-strong-encapsulation.txt"
|
|
cr "$JDK17" src/RandomDemo.java RandomDemo > "$OUT/08-random-generator.txt"
|
|
{ co "$JDK17" broken/SealedViolation.java; echo; co "$JDK17" broken/RecordFieldMutation.java; echo; co "$JDK17" broken/SwitchPatternOn17.java; } > "$OUT/09-compile-errors.txt"
|
|
exit 0
|