#!/usr/bin/env bash # Facts that a test cannot observe, read straight out of the jars on the classpath. # 10-chained-transaction-manager-jar.txt is ChainedTransactionManager still shipped, and is it deprecated? # 11-enable-jpa-repositories-not-repeatable.txt what javac says about two @EnableJpaRepositories on one class # 12-builder-packages.txt how EntityManagerFactoryBuilder.Builder.packages(Class...) turns classes into packages set -euo pipefail cd "$(dirname "$0")/.." mkdir -p output target mvn -B -q dependency:build-classpath -Dmdep.outputFile=target/classpath.txt >/dev/null CP="$(cat target/classpath.txt)" commons="$(tr ':' '\n' < target/classpath.txt | grep 'spring-data-commons' | head -1)" { echo "# Is org.springframework.data.transaction.ChainedTransactionManager still shipped, and is it deprecated?" echo echo "jar: $(basename "$commons")" echo "class: $(unzip -l "$commons" | awk '{print $4}' | grep 'transaction/ChainedTransactionManager.class')" echo echo "--- javap -v: class-level annotations ---" javap -v -cp "$commons" org.springframework.data.transaction.ChainedTransactionManager \ | awk '/^RuntimeVisibleAnnotations:/{p=1} p{print} /^BootstrapMethods:/{p=0}' | sed '/^BootstrapMethods:/,$d' echo "--- javap -v: Deprecated attribute ---" javap -v -cp "$commons" org.springframework.data.transaction.ChainedTransactionManager | grep -E '^Deprecated:' } > output/10-chained-transaction-manager-jar.txt { echo "# javac on a class carrying two @EnableJpaRepositories (scripts/facts/RepeatedEnable.java)" echo javac -proc:none -d target/facts -cp "$CP" scripts/facts/RepeatedEnable.java 2>&1 | grep -v "^Picked up" | sed "s|scripts/facts/||" || true } > output/11-enable-jpa-repositories-not-repeatable.txt boot_jpa="$(tr ':' '\n' < target/classpath.txt | grep 'spring-boot-jpa-' | head -1)" { echo "# What does EntityManagerFactoryBuilder.Builder.packages(Class...) do with the classes it is given?" echo echo "jar: $(basename "$boot_jpa")" echo echo "--- javap -c: the calls made inside packages(java.lang.Class...) ---" javap -c -p -cp "$boot_jpa" 'org.springframework.boot.jpa.EntityManagerFactoryBuilder$Builder' 2>&1 \ | grep -v '^Picked up' \ | awk '/packages\(java.lang.Class<\?>\.\.\.\);/{p=1} p&&/^$/{p=0} p' \ | grep -E 'invoke' | sed 's/^ *[0-9]*: *//' } > output/12-builder-packages.txt cat output/10-chained-transaction-manager-jar.txt output/11-enable-jpa-repositories-not-repeatable.txt output/12-builder-packages.txt