summaryrefslogtreecommitdiff
path: root/completions/java
diff options
context:
space:
mode:
Diffstat (limited to 'completions/java')
-rw-r--r--completions/java496
1 files changed, 496 insertions, 0 deletions
diff --git a/completions/java b/completions/java
new file mode 100644
index 00000000..8365a314
--- /dev/null
+++ b/completions/java
@@ -0,0 +1,496 @@
+# bash completion for java, javac and javadoc
+
+# available path elements completion
+have java && {
+_java_path()
+{
+ cur=${cur##*:}
+ _filedir '@(jar|zip)'
+}
+
+# exact classpath determination
+_java_find_classpath()
+{
+ local i
+
+ # search first in current options
+ for (( i=1; i < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" == -@(cp|classpath) ]]; then
+ classpath=${COMP_WORDS[i+1]}
+ break
+ fi
+ done
+
+ # default to environment
+ [ -z "$classpath" ] && classpath=$CLASSPATH
+
+ # default to current directory
+ [ -z "$classpath" ] && classpath=.
+}
+
+# exact sourcepath determination
+_java_find_sourcepath()
+{
+ local i
+
+ # search first in current options
+ for (( i=1; i < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" == -sourcepath ]]; then
+ sourcepath=${COMP_WORDS[i+1]}
+ break
+ fi
+ done
+
+ # default to classpath
+ if [ -z "$sourcepath" ]; then
+ _java_find_classpath
+ sourcepath=$classpath
+ fi
+}
+
+# available classes completion
+_java_classes()
+{
+ local classpath i
+
+ # find which classpath to use
+ _java_find_classpath
+
+ # convert package syntax to path syntax
+ cur=${cur//.//}
+ # parse each classpath element for classes
+ for i in ${classpath//:/ }; do
+ if [[ -r $i && "$i" == *.@(jar|zip) ]]; then
+ if type zipinfo &>/dev/null; then
+ COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \
+ "$i" "$cur*" 2>/dev/null | \
+ command grep '^[^$]*\.class$' ) )
+ else
+ COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \
+ "$cur" | command grep '^[^$]*\.class$' ) )
+ fi
+
+ elif [ -d $i ]; then
+ # Intentionally looking for *.class only in $i (not subdirs),
+ # see Debian bug #496828.
+ COMPREPLY=( "${COMPREPLY[@]}"
+ $( command ls $i/$cur*.class 2>/dev/null | \
+ sed -ne '/\$/d' -e "s|^$i//*||p" ) )
+
+ # FIXME: if we have foo.class and foo/, the completion
+ # returns "foo/"... how to give precedence to files
+ # over directories?
+ fi
+ done
+
+ # remove class extension
+ COMPREPLY=( ${COMPREPLY[@]%.class} )
+ # convert path syntax to package syntax
+ COMPREPLY=( ${COMPREPLY[@]//\//.} )
+}
+
+# available packages completion
+_java_packages()
+{
+ local sourcepath i
+
+ # find which sourcepath to use
+ _java_find_sourcepath
+
+ # convert package syntax to path syntax
+ cur=${cur//.//}
+ # parse each sourcepath element for packages
+ for i in ${sourcepath//:/ }; do
+ if [ -d $i ]; then
+ COMPREPLY=( "${COMPREPLY[@]}" $( command ls -F -d \
+ $i/$cur* 2>/dev/null | sed -e 's|^'$i'/||' ) )
+ fi
+ done
+ # keep only packages
+ COMPREPLY=( $( tr " " "\n" <<<"${COMPREPLY[@]}" | command grep "/$" ) )
+ # remove packages extension
+ COMPREPLY=( ${COMPREPLY[@]%/} )
+ # convert path syntax to package syntax
+ cur=${COMPREPLY[@]//\//.}
+}
+
+# java completion
+#
+_java()
+{
+ local cur prev words cword i
+
+ COMPREPLY=()
+ _get_comp_words_by_ref -n : cur prev words cword
+
+ for ((i=1; i < $cword; i++)); do
+ case ${words[$i]} in
+ -cp|-classpath)
+ ((i++)) # skip the classpath string.
+ ;;
+ -*)
+ # this is an option, not a class/jarfile name.
+ ;;
+ *)
+ # once we've seen a class, just do filename completion
+ _filedir
+ return 0
+ ;;
+ esac
+ done
+
+ case $cur in
+ # standard option completions
+ -verbose:*)
+ COMPREPLY=( $( compgen -W 'class gc jni' -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -javaagent:*)
+ cur=${cur#*:}
+ _filedir '@(jar|zip)'
+ return 0
+ ;;
+ -agentpath:*)
+ cur=${cur#*:}
+ _filedir so
+ return 0
+ ;;
+ # various non-standard option completions
+ -splash:*)
+ cur=${cur#*:}
+ _filedir '@(gif|jp?(e)g|png)'
+ return 0
+ ;;
+ -Xbootclasspath*:*)
+ _java_path
+ return 0
+ ;;
+ -Xcheck:*)
+ COMPREPLY=( $( compgen -W 'jni' -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -Xgc:*)
+ COMPREPLY=( $( compgen -W 'singlecon gencon singlepar genpar' \
+ -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -Xgcprio:*)
+ COMPREPLY=( $( compgen -W 'throughput pausetime deterministic' \
+ -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -Xloggc:*|-Xverboselog:*)
+ cur=${cur#*:}
+ _filedir
+ return 0
+ ;;
+ -Xshare:*)
+ COMPREPLY=( $( compgen -W 'auto off on' -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -Xverbose:*)
+ COMPREPLY=( $( compgen -W 'memory load jni cpuinfo codegen opt
+ gcpause gcreport' -- "${cur#*:}" ) )
+ return 0
+ ;;
+ -Xverify:*)
+ COMPREPLY=( $( compgen -W 'all none remote' -- "${cur#*:}" ) )
+ return 0
+ ;;
+ # the rest that we have no completions for
+ -D*|-*:*)
+ return 0
+ ;;
+ esac
+
+ case $prev in
+ -cp|-classpath)
+ _java_path
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ # standard options
+ COMPREPLY=( $( compgen -W '-client -server -agentlib: -agentpath:
+ -classpath -D -d32 -d64 -enableassertions -disableassertions
+ -enablesystemassertions -disablesystemassertions -jar -javaagent:
+ -verbose -verbose -version -showversion -help -X' -- "$cur" ) )
+ else
+ if [[ "$prev" == -jar ]]; then
+ # jar file completion
+ _filedir jar
+ else
+ # classes completion
+ _java_classes
+ fi
+ fi
+
+ [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == -*[:=] ]] && \
+ type compopt &>/dev/null && compopt -o nospace
+
+ __ltrim_colon_completions "$cur"
+}
+complete -F _java java
+}
+
+have javadoc &&
+_javadoc()
+{
+ COMPREPLY=()
+ local cur prev classpath
+
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ -overview|-helpfile)
+ _filedir '?(x)htm?(l)'
+ return 0
+ ;;
+ -stylesheetfile)
+ _filedir css
+ return 0
+ ;;
+ -d|-link|-linkoffline)
+ # TODO: -linkoffline takes two arguments
+ _filedir -d
+ return 0
+ ;;
+ -classpath|-bootclasspath|-docletpath|-sourcepath|-extdirs)
+ _java_path
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ # relevant options completion
+ COMPREPLY=( $( compgen -W '-overview -public -protected \
+ -package -private -help -doclet -docletpath \
+ -sourcepath -classpath -exclude -subpackages \
+ -breakiterator -bootclasspath -source -extdirs \
+ -verbose -locale -encoding -J -d -use -version \
+ -author -docfilessubdirs -splitindex \
+ -windowtitle -doctitle -header -footer -bottom \
+ -link -linkoffline -excludedocfilessubdir \
+ -group -nocomment -nodeprecated -noqualifier \
+ -nosince -nodeprecatedlist -notree -noindex \
+ -nohelp -nonavbar -quiet -serialwarn -tag \
+ -taglet -tagletpath -charset -helpfile \
+ -linksource -stylesheetfile -docencoding' -- "$cur" ) )
+ else
+ # source files completion
+ _filedir java
+ # packages completion
+ _java_packages
+ fi
+} &&
+complete -F _javadoc javadoc
+
+have javac &&
+_javac()
+{
+ COMPREPLY=()
+ local cur prev
+
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ -d)
+ _filedir -d
+ return 0
+ ;;
+ -classpath|-bootclasspath|-sourcepath|-extdirs)
+ _java_path
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ # relevant options completion
+ COMPREPLY=( $( compgen -W '-g -g:none -g:lines -g:vars \
+ -g:source -O -nowarn -verbose -deprecation -classpath \
+ -sourcepath -bootclasspath -extdirs -d -encoding -source \
+ -target -help' -- "$cur" ) )
+ else
+ # source files completion
+ _filedir java
+ fi
+} &&
+complete -F _javac javac
+
+have pack200 &&
+_pack200()
+{
+ COMPREPLY=()
+ local cur prev
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ -S|--segment-limit|-P|--pass-file|-C|--class-attribute|\
+ -F|--field-attribute|-M|--method-attribute|-D|--code-attribute|\
+ '-?'|-h|--help|-V|--version|-J)
+ return 0
+ ;;
+ -E|--effort)
+ COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$cur" ) )
+ return 0
+ ;;
+ -H|--deflate-hint)
+ COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
+ return 0
+ ;;
+ -m|--modification-time)
+ COMPREPLY=( $( compgen -W 'latest keep' -- "$cur" ) )
+ return 0
+ ;;
+ -U|--unknown-attribute)
+ COMPREPLY=( $( compgen -W 'error strip pass' -- "$cur" ) )
+ return 0
+ ;;
+ -f|--config-file)
+ _filedir properties
+ return 0
+ ;;
+ -l|--log-file)
+ COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
+ _filedir log
+ return 0
+ ;;
+ esac
+
+ # Check if a pack or a jar was already given.
+ local i pack=false jar=false
+ for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
+ case ${COMP_WORDS[i]} in
+ *.pack|*.pack.gz) pack=true ;;
+ *.jar) jar=true ;;
+ esac
+ done
+
+ if ! $pack ; then
+ if [[ "$cur" == -* ]] ; then
+ COMPREPLY=( $( compgen -W '--no-gzip --gzip --strip-debug \
+ --no-keep-file-order --segment-limit= --effort= \
+ --deflate-hint= --modification-time= --pass-file= \
+ --unknown-attribute= --class-attribute= --field-attribute= \
+ --method-attribute= --code-attribute= --config-file= \
+ --verbose --quiet --log-file= --help --version -J' -- "$cur" ) )
+ [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
+ type compopt &>/dev/null && compopt -o nospace
+ else
+ _filedir 'pack?(.gz)'
+ fi
+ elif ! $jar ; then
+ _filedir jar
+ fi
+} &&
+complete -F _pack200 pack200
+
+have unpack200 &&
+_unpack200()
+{
+ COMPREPLY=()
+ local cur prev
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ '-?'|-h|--help|-V|--version|-J)
+ return 0
+ ;;
+ -H|--deflate-hint)
+ COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
+ return 0
+ ;;
+ -l|--log-file)
+ COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
+ _filedir log
+ return 0
+ ;;
+ esac
+
+ # Check if a pack or a jar was already given.
+ local i pack=false jar=false
+ for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
+ case ${COMP_WORDS[i]} in
+ *.pack|*.pack.gz) pack=true ;;
+ *.jar) jar=true ;;
+ esac
+ done
+
+ if ! $pack ; then
+ if [[ "$cur" == -* ]] ; then
+ COMPREPLY=( $( compgen -W '--deflate-hint= --remove-pack-file \
+ --verbose --quiet --log-file= --help --version' -- "$cur" ) )
+ [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
+ type compopt &>/dev/null && compopt -o nospace
+ else
+ _filedir 'pack?(.gz)'
+ fi
+ elif ! $jar ; then
+ _filedir jar
+ fi
+} &&
+complete -F _unpack200 unpack200
+
+have jarsigner &&
+_jarsigner()
+{
+ COMPREPLY=()
+ local cur prev
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ -keystore)
+ COMPREPLY=( $( compgen -W 'NONE' -- "$cur" ) )
+ _filedir '@(jks|ks|p12|pfx)'
+ return 0
+ ;;
+ -storepass|-keypass|-sigfile|-digestalg|-sigalg|-tsacert|-altsigner|\
+ -altsignerpath|-providerName|-providerClass|-providerArg)
+ return 0
+ ;;
+ -storetype)
+ COMPREPLY=( $( compgen -W 'JKS PKCS11 PKCS12' -- "$cur" ) )
+ return 0
+ ;;
+ -signedjar)
+ _filedir jar
+ return 0
+ ;;
+ -tsa)
+ _filedir
+ return 0
+ ;;
+ esac
+
+ # Check if a jar was already given.
+ local i jar=false
+ for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
+ if [[ "${COMP_WORDS[i]}" == *.jar && \
+ "${COMP_WORDS[i-1]}" != -signedjar ]] ; then
+ jar=true
+ break
+ fi
+ done
+
+ if ! $jar ; then
+ if [[ "$cur" == -* ]] ; then
+ # Documented as "should not be used": -internalsf, -sectionsonly
+ COMPREPLY=( $( compgen -W '-keystore -storepass -storetype \
+ -keypass -sigfile -signedjar -digestalg -sigalg -verify \
+ -verbose -certs -tsa -tsacert -altsigner -altsignerpath \
+ -protected -providerName -providerClass -providerArg' \
+ -- "$cur" ) )
+ fi
+ _filedir jar
+ fi
+} &&
+complete -F _jarsigner jarsigner
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 4
+# sh-indent-comment: t
+# indent-tabs-mode: nil
+# End:
+# ex: ts=4 sw=4 et filetype=sh