summaryrefslogtreecommitdiff
path: root/completions/java
diff options
context:
space:
mode:
Diffstat (limited to 'completions/java')
-rw-r--r--completions/java327
1 files changed, 56 insertions, 271 deletions
diff --git a/completions/java b/completions/java
index 460ae285..e02f7369 100644
--- a/completions/java
+++ b/completions/java
@@ -1,23 +1,21 @@
-# bash completion for java, javac and javadoc
+# bash completion for java, javac and javadoc -*- shell-script -*-
# available path elements completion
-have java || have javac || have javadoc &&
_java_path()
{
cur=${cur##*:}
_filedir '@(jar|zip)'
}
-have java || have javadoc && {
# 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]}
+ for (( i=1; i < cword; i++ )); do
+ if [[ "${words[i]}" == -@(cp|classpath) ]]; then
+ classpath=${words[i+1]}
break
fi
done
@@ -35,15 +33,16 @@ _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]}
+ for (( i=1; i < cword; i++ )); do
+ if [[ "${words[i]}" == -sourcepath ]]; then
+ sourcepath=${words[i+1]}
break
fi
done
# default to classpath
if [ -z "$sourcepath" ]; then
+ local classpath
_java_find_classpath
sourcepath=$classpath
fi
@@ -63,20 +62,20 @@ _java_classes()
for i in ${classpath//:/ }; do
if [[ "$i" == *.@(jar|zip) && -r $i ]]; then
if type zipinfo &>/dev/null; then
- COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \
- "$i" "$cur*" 2>/dev/null | \
+ COMPREPLY+=( $( zipinfo -1 "$i" "$cur*" 2>/dev/null | \
command grep '^[^$]*\.class$' ) )
else
- COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \
- "$cur" | command grep '^[^$]*\.class$' ) )
+ 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" ) )
+ COMPREPLY+=(
+ $( compgen -d -- "$i/$cur" | sed -e "s|^$i/\(.*\)|\1.|" )
+ $( compgen -f -X '!*.class' -- "$i/$cur" | \
+ sed -e '/\$/d' -e "s|^$i/||" )
+ )
+ [[ $COMPREPLY == *.class ]] || compopt -o nospace
# FIXME: if we have foo.class and foo/, the completion
# returns "foo/"... how to give precedence to files
@@ -103,8 +102,8 @@ _java_packages()
# 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'/||' ) )
+ COMPREPLY+=( $( command ls -F -d $i/$cur* 2>/dev/null | \
+ sed -e 's|^'$i'/||' ) )
fi
done
# keep only packages
@@ -114,17 +113,15 @@ _java_packages()
# convert path syntax to package syntax
cur=${COMPREPLY[@]//\//.}
}
-}
# java completion
#
-have java &&
_java()
{
- local cur prev words cword i
+ local cur prev words cword
+ _init_completion -n : || return
- COMPREPLY=()
- _get_comp_words_by_ref -n : cur prev words cword
+ local i
for ((i=1; i < $cword; i++)); do
case ${words[$i]} in
@@ -214,11 +211,9 @@ _java()
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" ) )
+ COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) )
+ [[ $cur == -X* ]] && \
+ COMPREPLY+=( $( compgen -W '$( _parse_help "$1" -X )' -- "$cur" ) )
else
if [[ "$prev" == -jar ]]; then
# jar file completion
@@ -229,20 +224,16 @@ _java()
fi
fi
- [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == -*[:=] ]] && \
- type compopt &>/dev/null && compopt -o nospace
+ [[ $COMPREPLY == -*[:=] ]] && 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
+ local cur prev words cword
+ _init_completion || return
case $prev in
-overview|-helpfile)
@@ -254,7 +245,6 @@ _javadoc()
return 0
;;
-d|-link|-linkoffline)
- # TODO: -linkoffline takes two arguments
_filedir -d
return 0
;;
@@ -264,21 +254,14 @@ _javadoc()
;;
esac
+ # -linkoffline takes two arguments
+ if [[ $cword -gt 2 && ${words[$cword-2]} == -linkoffline ]]; then
+ _filedir -d
+ return
+ fi
+
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" ) )
+ COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) )
else
# source files completion
_filedir java
@@ -288,13 +271,10 @@ _javadoc()
} &&
complete -F _javadoc javadoc
-have javac &&
_javac()
{
- COMPREPLY=()
- local cur prev
-
- _get_comp_words_by_ref cur prev
+ local cur prev words cword
+ _init_completion -n : || return
case $prev in
-d)
@@ -307,227 +287,32 @@ _javac()
;;
esac
+ if [[ $cur == -+([a-zA-z0-9-_]):* ]]; then
+ # Parse required options from -foo:{bar,quux,baz}
+ local helpopt=-help
+ [[ $cur == -X* ]] && helpopt=-X
+ # For some reason there may be -g:none AND -g:{lines,source,vars};
+ # convert the none case to the curly brace format so it parses like
+ # the others.
+ local opts=$( "$1" $helpopt 2>&1 | sed -e 's/-g:none/-g:{none}/' -ne \
+ "s/^[[:space:]]*${cur%%:*}:{\([^}]\{1,\}\)}.*/\1/p" )
+ COMPREPLY=( $( compgen -W "${opts//,/ }" -- "${cur#*:}" ) )
+ return
+ fi
+
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" ) )
+ COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) )
+ [[ $cur == -X* ]] && \
+ COMPREPLY+=( $( compgen -W '$( _parse_help "$1" -X )' -- "$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
- ;;
- -r|--repack)
- _filedir jar
- 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 \
- --repack' -- "$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
+ [[ $COMPREPLY == -*[:=] ]] && compopt -o nospace
- 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
+ __ltrim_colon_completions "$cur"
} &&
-complete -F _jarsigner jarsigner
-
-have javaws &&
-_javaws()
-{
- COMPREPLY=()
- local cur prev
- _get_comp_words_by_ref cur prev
-
- case $prev in
- -help|-license|-about|-viewer|-arg|-param|-property|-update|-umask)
- return 0
- ;;
- -basedir|-codebase)
- _filedir -d
- return 0
- ;;
- -uninstall|-import)
- _filedir jnlp
- return 0
- ;;
- esac
-
- if [[ $cur == -* ]]; then
- COMPREPLY=( $( compgen -W "$( _parse_help "$1" -help ) " -- "$cur" ) )
- return 0
- fi
+complete -F _javac javac
- _filedir jnlp
-} &&
-complete -F _javaws javaws
-
-# 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