diff options
Diffstat (limited to 'Completion/Unix/Type/_java_class')
-rw-r--r-- | Completion/Unix/Type/_java_class | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Completion/Unix/Type/_java_class b/Completion/Unix/Type/_java_class new file mode 100644 index 000000000..d81669c00 --- /dev/null +++ b/Completion/Unix/Type/_java_class @@ -0,0 +1,24 @@ +#autoload + +# Should probably add some sort of cache. +# Should we call _multi_parts instead of compadd? + +local classpath i expl +local -a c +local method type + +zparseopts -D -E -a classpath t:=type m:=method cp: classpath: +: "$classpath[@]" +classpath="${${classpath[2]:-${CLASSPATH:-.}}//\\:/:}" +: "$classpath[@]" + +for i in "${(s.:.)classpath}"; do + if [ -f $i ] && [[ "$i" == *.(jar|zip|war|ear) ]]; then + c+=( ${${${(M)$(_call_program jar_classes jar -tf $i)##*.class}%%.class}:gs#/#.#} ) + elif [ -d $i ]; then + c+=( $i/**/*.class(.:r:s/.class//:s#$i/##:gs#/#.#) ) + fi +done + +_wanted classes expl 'java class' compadd "$@" -M 'r:|.=* r:|=*' -a - c + |