#!/bin/sh # Ad hoc script for merging annotated JDKs. Arguments are JDK source # directories, assumed to be children of $js and identified by directory # name only (e.g. "merge-annotations nullness"). if [ $# -le 1 ]; then exit 0; fi js="$HOME/src/jdk1.8.0_45/src" jb="$CHECKERFRAMEWORK/checker/dist/*" cf="$CHECKERFRAMEWORK/checker/build" sl="$JSR308/annotation-tools/scene-lib/bin" al="$JSR308/annotation-tools/annotation-file-utilities/lib" jj=./jdk.jaif wd=`pwd` cp="$jb:$cf:$sl:$al/*:$wd:$CLASSPATH" if [ 0 -eq 1 ] ; then td=/tmp/merge-jaifs.* else td=/tmp/merge-jaifs.$$ for aj in $* ; do cd $aj/build for f in `find . -name '*\.class' -print | sed 's-^\./--'` ; do CLASSPATH="$wd/$aj/build:$CHECKERFRAMEWORK/checker/build:$CLASSPATH" \ extract-annotations "$f" if [ $? -eq 0 ] ; then d=`dirname "$f"` mkdir -p "$td/$aj/$d" mv "$d"/*.jaif "$td/$aj/$d" fi done cd "$wd" done fi find $td -type f -print | xargs java -cp "$cp" annotations.tools.IndexFileMerger $td | sed 's/(value={\[/({/g' | sed 's/\]}/}/g' > "./$jj" &&\ find "$js" -name "*\.java" -print | CLASSPATH="$cp" xargs insert-annotations-to-source --print-error-stack "$jj" &&\ rm -rf $td