1#!/bin/sh 2 3# Ad hoc script for merging annotated JDKs. Arguments are JDK source 4# directories, assumed to be children of $js and identified by directory 5# name only (e.g. "merge-annotations nullness"). 6 7if [ $# -le 1 ]; then exit 0; fi 8 9js="$HOME/src/jdk1.8.0_45/src" 10jb="$CHECKERFRAMEWORK/checker/dist/*" 11cf="$CHECKERFRAMEWORK/checker/build" 12sl="$JSR308/annotation-tools/scene-lib/bin" 13al="$JSR308/annotation-tools/annotation-file-utilities/lib" 14jj=./jdk.jaif 15wd=`pwd` 16cp="$jb:$cf:$sl:$al/*:$wd:$CLASSPATH" 17if [ 0 -eq 1 ] ; then 18td=/tmp/merge-jaifs.* 19else 20td=/tmp/merge-jaifs.$$ 21 22for aj in $* ; do 23 cd $aj/build 24 for f in `find . -name '*\.class' -print | sed 's-^\./--'` ; do 25 CLASSPATH="$wd/$aj/build:$CHECKERFRAMEWORK/checker/build:$CLASSPATH" \ 26 extract-annotations "$f" 27 if [ $? -eq 0 ] ; then 28 d=`dirname "$f"` 29 mkdir -p "$td/$aj/$d" 30 mv "$d"/*.jaif "$td/$aj/$d" 31 fi 32 done 33 cd "$wd" 34done 35fi 36 37find $td -type f -print | xargs java -cp "$cp" annotations.tools.IndexFileMerger $td | sed 's/(value={\[/({/g' | sed 's/\]}/}/g' > "./$jj" &&\ 38find "$js" -name "*\.java" -print | CLASSPATH="$cp" xargs insert-annotations-to-source --print-error-stack "$jj" &&\ 39rm -rf $td 40 41