about summary refs log tree commit diff
path: root/Completion/Unix/Command/_java
blob: 9c5d3688f0bb03f1f39837e47147fda171350325 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
#compdef javac java javadoc appletviewer jar jdb javah javap extcheck rmic rmiregistry rmid serialver native2ascii keytool jarsigner policytool

local expl tmp jdb_args jar_cmd match basedir ret=1
local curcontext="$curcontext" state line jf
typeset -A opt_args tmpassoc

jdb_args=()

case "$service" in
javac)
  _arguments -C \
    '-g-[generate debugging information]:debug:->debug' \
    '-nowarn[generate no warnings]' \
    '-verbose[output messages about what the compiler is doing]' \
    '-deprecation[output source locations where deprecated APIs are used]' \
    '-classpath[specify where to find user class files]:class path:->classpath' \
    '-sourcepath[specify where to find input source files]:source path:->sourcepath' \
    '-bootclasspath[override location of bootstrap class files]:bootstrap class path:->bootstrapclasspath' \
    '-extdirs[override location of installed extensions]:extensions directories:->extdirs' \
    '-d[specify where to place generated class files]:directory:_files -/' \
    '-encoding[specify character encoding used by source files]:encoding:->encoding' \
    '-source[provide source compatibility with specified release]:release:(1.3 1.4)' \
    '-target[specify VM version]:release:(1.{1..4})' \
    '-help[print a synopsis of standard options]' \
    '*:java source file:_files -g \*.java' && return 0
  ;;

jdb)
  jdb_args=(
    '-host[specify hostname to connect]:hostname:_hosts'
    '-password[specify password]:password:'
  )
  ;&

java)
  _arguments -C \
    "$jdb_args[@]" \
    '(-cp)-classpath[specify path for user class files]:class path:->classpath' \
    '(-classpath)-cp[specify path for user class files]:class path:->classpath' \
    '-D-[specify a property]:property:->property' \
    '(-verbose:class)-verbose[print class information]' \
    '(-verbose)-verbose\:class[print class information]' \
    '-verbose\:gc[print gc information]' \
    '-verbose\:jni[print JNI information]' \
    '-version[print version]' \
    '-help[print help message]' \
    '(- 1)-jar[specify a program capsulated as jar]:jar:_files -g \*.jar' \
    '(-):class:->class' \
    '*::args: _normal' \
     && return 0
  ;;

javadoc)
  _arguments -C \
    '-overview[specify overview file]:_files' \
    '-public[display public classes and members only]' \
    '-protected[display public/protected classes and members only (default)]' \
    '-package[display packages, public/protected classes and members only]' \
    '-private[display all classes and members]' \
    '-help[print help message]' \
    '-doclet[specify a doclet]:doclet:->doclet' \
    '-docletpath[specify a path to search doclet]:doclet path:->docletpath' \
    '-1.1[Javadoc 1.1 compatible output]' \
    '-sourcepath[specify path for source files]:source path:->sourcepath' \
    '-classpath[specify path for user class files]:class path:->classpath' \
    '-bootclasspath[specify path for bootstrap class files]:bootstrap class path:->bootstrapclasspath' \
    '-extdirs[specify directories for extensions]:extensions directories:->extdirs' \
    '-verbose[print verbose messages]' \
    '-locale[specify locale]:language_country_variant:' \
    '-encoding[specify character encoding for source files]:encoding:->encoding' \
    '-J-[specify java option]:java option:' \
    '-d[specify destination directory]:destination directory:_files -/' \
    '-use[display pages for use]' \
    '-version[include @version text]' \
    '-author[include @author text]' \
    '-splitindex[split index file for each alphabet]' \
    '-windowtitle[specify HTML title element]:title element:' \
    '-doctitle[specify title]:document title:' \
    '-header[specify header text]:header text:' \
    '-footer[specify footer text]:footer text:' \
    '-bottom[specify bottom text]:bottom text:' \
    '-link[generate a link to external reference classes]:document URL:' \
    '-linkoffline[generate a link for external reference class names]:document URL::package list URL:' \
    '-group[generate tables for each groupes]:group heading::package patterns:' \
    '-nodeprecated[do not document deprecated API]' \
    '-nodeprecatedlist[do not generate deprecated API list]' \
    '-notree[do not generate class and interface hierarchy]' \
    '-noindex[do not generate index]' \
    '-nohelp[do not generate help link]' \
    '-nonavbar[do not generate navigation bar]' \
    '-helpfile[specify alternative help link]:helpfile path/filename:' \
    '-stylesheet[specify alternative HTML style sheet]:stylesheet path/filename:' \
    '-docencoding[specify character encoding for output HTML files]:encoding:->encoding' \
    '*:package name, source file or @list:->docsrc' && ret=0
  ;;

appletviewer)
  _arguments -C \
    '-debug[run applet on jdb]' \
    '-encoding[specify character encoding for source files]:encoding:->encoding' \
    '-J-[specify java option]:java option:' \
    '*:url:_urls' && return 0
  ;;

jar)
  if (( CURRENT == 2 )); then
    compset -P -
    _values -s '' 'jar command' \
      '(  t x u)c[create new archive]' \
      '(c   x u)t[list the table of archive]' \
      '(c t   u)x[extract files from archive]' \
      '(c t x  )u[update archive]' \
      'f[specify archive file]' \
      'v[verbose mode]' \
      'm[specify manifest file]' \
      '0[store only without using ZIP compression]' \
      'M[do not create manifest file]' && return
  else
    jar_cmd="${words[2]#-}"
    tmpassoc=(
      m ':manifest file:_files'
      f ':archive file:_files -g \*.\(jar\|zip\)'
    )
    _arguments -C \
      "${jar_cmd/[^-]*/:dummy:}" \
      ${${(s::)jar_cmd}/(#b)(?)/$tmpassoc[$match[1]]} \
      '*:file:->jararg' && return 0
  fi
  ;;

javah|javah_g)
  _arguments -C \
    '-o[specify output file]:output file:_files' \
    '-d[specify destination directory]:directory:_files -/' \
    '-stubs[generate stubs]' \
    '-verbose[print verbose messages]' \
    '-help[print help message]' \
    '-version[print version]' \
    '-jni[JNI-style native method function prototypes]' \
    '-classpath[specify path for user class files]:class path:->classpath' \
    '-bootclasspath[specify path for bootstrap class files]:bootstrap class path:->bootstrapclasspath' \
    '-old[generate old JDK1.0-style header files]' \
    '-force[force output]' \
    '*:fully qualified classname:->class' && return 0
  ;;

javap)
  _arguments -C \
    '-help[print help message]' \
    '-l[line and local variable tables]' \
    '-b[backward compatible to JDK1.1]' \
    '-public[only public classes and members]' \
    '-protected[only protected and public classes and members]' \
    '-package[only package, protected and public classes and members (default)]' \
    '-private[all classes and members]' \
    '-J-[specify java option]:java option:' \
    '-s[internal type signatures]' \
    '-c[disassemble code]' \
    '-verbose[stack size, number of locals and args for methods]' \
    '-classpath[specify path for user class files]:class path:->classpath' \
    '-bootclasspath[specify path for bootstrap class files]:bootstrap class path:->bootstrapclasspath' \
    '-extdirs[specify directories for extensions]:extensions directories:->extdirs' \
    '*:class:->class' && return 0
  ;;

extcheck)
  _arguments \
    '-verbose[print verbose messages]' \
    ':target jar file:_files -g \*.jar' && return 0
  ;;

rmic)
  _arguments -C \
    '-classpath[specify path for user class files]:class path:->classpath' \
    '-d[specify destination directory]:directory:_files -/' \
    '-depend[treat dependencies]' \
    '-g[enable debugging]' \
    '-J-[specify java option]:java option:' \
    '-keepgenerated[retain generated source files]' \
    '-nowarn[disable warnings]' \
    '-show[GUI mode]' \
    '-vcompat[compatible with JDK 1.1 and 1.2 (default)]' \
    '-verbose[print verbose messages]' \
    '-v1.1[JDK 1.1 stub protocol]' \
    '-v1.2[JDK 1.2 stub protocol]' \
    '*:package qualified class name:->class' && return 0
  ;;

rmiregistry)
  if (( CURRENT == 2 )); then
    _wanted ports expl 'port to listen' _ports && return
  else
    _message 'no more arguments'
  fi
  ;;

rmid)
  _arguments \
    '-C-[specify command line argument for child process]:command line argument for child process:' \
    '-log[specify log directory]:directory to place logs:_files -/' \
    '-port[specify port]:port:_ports' \
    '-stop[stop rmid]:' && return 0
  ;;
       
serialver)
  _arguments \
    '-classpath[specify where to find user class files]:class path:->classpath' \
    '(*)-show[display user interface]' \
    '(-show)*:class:_java_class ${(kv)opt_args[(i)-classpath]}' && return 0
  ;;

native2ascii)
  _arguments -C \
    '-reverse[convert Latin-1 (with \udddd) to native encoding]' \
    '-encoding[specify character encoding]:encoding:->encoding' \
    ':input file:_files' \
    ':output file:_files' && return 0
  ;;

keytool)
  _arguments \
      '-J-[specify java option]:java option:' \
    - genkey \
      '-genkey[command to generate a key pair]' \
      '-alias[alias]:alias:' \
      '-keyalg[key algorithm]:key algorithm:' \
      '-keysize[key size]:key size:' \
      '-sigalg[signature algorithm]:signature algorithm:' \
      '-dname[X.500 distinguish name]:X.500 distinguish name:' \
      '-keypass[password for private key]:password for private key:' \
      '-validity[valid days]:number of days:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - import \
      '-import[command to import certificate or certificate chain]' \
      '-alias[alias]:alias:' \
      '-file[specify certificate file]:certificate file:_files' \
      '-keypass[password for private key]:password for private key:' \
      '-noprompt[disable interaction with the user]' \
      '-trustcacerts[use cacerts]' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - selfcert \
      '-selfcert[command to generate X.509 v1 self-signed certificate]' \
      '-alias[alias]:alias:' \
      '-sigalg[signature algorithm]:signature algorithm:' \
      '-dname[X.500 distinguish name]:X.500 distinguish name:' \
      '-validity[valid days]:number of days:' \
      '-keypass[password for private key]:password for private key:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - identitydb \
      '-identitydb[command to read identity database]' \
      '-file[specify identity database file]:identity database file:_files' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - certreq \
      '-certreq[command to generate certificate signing request]' \
      '-alias[alias]:alias:' \
      '-sigalg[signature algorithm]:signature algorithm:' \
      '-file[specify certificate signing request file]:certificate signing request file:_files' \
      '-keypass[password for private key]:password for private key:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - export \
      '-export[command to store certificate]' \
      '-alias[alias]:alias:' \
      '-file[specify certificate file]:certificate file:_files' \
      '-rfc[make certificate format printable as RFC 1421]' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - list \
      '-list[command to print keystore entry]' \
      '-alias[alias]:alias:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '(-rfc)-v[make certificate format human-readable]' \
      '(-v)-rfc[make certificate format printable as RFC 1421]' \
    - printcert \
      '-printcert[command to print certificate in a human-readable format]' \
      '-file[specify certificate file]:certificate file:_files' \
      '-v[verbose mode]' \
    - keyclone \
      '-keyclone[command to create new keystore entry]' \
      '-alias[alias]:alias:' \
      '-dest[destination alias]:destination alias:' \
      '-keypass[password for private key]:password for private key:' \
      '-new[password for private key of new entry]:password for private key of new entry:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - storepasswd \
      '-storepasswd[command to change password for keystore]' \
      '-new[new password]:new password:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - keypasswd \
      '-keypasswd[command to change password for private key]' \
      '-alias[alias]:alias:' \
      '-keypass[old password for private key]:old password for private key:' \
      '-new[nwe password for private key]:new password for private key:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - delete \
      '-delete[command to delete entry]' \
      '-alias[alias]:alias:' \
      '-storetype[keystore type]:store type:' \
      '-keystore[keystore location]:keystore location:' \
      '-storepass[password for keystore]:password:' \
      '-v[verbose mode]' \
    - help \
      '(-J)-help[command to print help message]' && return 0
  ;;

jarsigner)
  _arguments \
    '-keystore[specify url for keystore location]:url for keystore location:' \
    '-storetype[specify keystore type]:store type:' \
    '-storepass[specify password for keystore]:password:' \
    '-keypass[specify password for private key]:password:' \
    '-sigfile[specify base file name of .SF and .DSA files to be generated]:sigfile:_files' \
    '-signedjar[specify signed JAR file]:_files -g \*.\(jar\|zip\)' \
    '(2)-verify[verify mode]' \
    '-certs[output certificate information in verify mode]' \
    '-verbose[print verbose messages]' \
    '-internalsf[old behaviour]' \
    '-sectionsonly[omit header of hash of the whole manifest file]' \
    '-J-[specify java option]:java option:' \
    ':jar file:_files -g \*.\(jar\|zip\)' \
    ':alias:' && return 0
  ;;

policytool)
  _arguments \
    '-file:policy file:_files' && return 0
  ;;

*)
  _message 'unknown command'
  ;;
esac

[[ -n "$state" ]] &&
case "$state" in
debug)
  if [[ -prefix :*, ]]; then
    compset -P :
    _values -s , "debug info" lines vars source && return
  else
    _description debuginfo expl "debug info"
    compadd -P: "$expl[@]" none && ret=0
    compadd -P: -qS, "$expl[@]" lines vars source && ret=0
  fi
  ;;

classpath|sourcepath|bootstrapclasspath|docletpath)
  compset -P '*:'
  compset -S ':*'
  _alternative \
    "classpath:$state:_path_files -qS: -g '*.(jar|zip)'" \
    "classpath:$state:_path_files -r': ' -/" && return
  ;;

extdirs)
  compset -P '*:'
  _path_files -/ && return
  ;;

encoding)
  tmp=(
    '8859_1:ISO 8859-1'
    '8859_2:ISO 8859-2'
    '8859_3:ISO 8859-3'
    '8859_4:ISO 8859-4'
    '8859_5:ISO 8859-5'
    '8859_6:ISO 8859-6'
    '8859_7:ISO 8859-7'
    '8859_8:ISO 8859-8'
    '8859_9:ISO 8859-9'
    'Big5:Big5, Traditional Chinese'
    'CNS11643:CNS 11643, Traditional Chinese'
    'Cp037:USA, Canada(Bilingual, French), Netherlands, Portugal, Brazil, Australia'
    'Cp1006:IBM AIX Pakistan (Urdu)'
    'Cp1025:IBM Multilingual Cyrillic - Bulgaria, Bosnia, Herzegovinia, Macedonia(FYR)'
    'Cp1026:IBM Latin-5, Turkey'
    'Cp1046:IBM Open Edition US EBCDIC'
    'Cp1097:IBM Iran(Farsi)/Persian'
    'Cp1098:IBM Iran(Farsi)/Persian (PC)'
    'Cp1112:IBM Latvia, Lithuania'
    'Cp1122:IBM Estonia'
    'Cp1123:IBM Ukraine'
    'Cp1124:IBM AIX Ukraine'
    'Cp1125:IBM Ukraine (PC)'
    'Cp1250:Windows Eastern European'
    'Cp1251:Windows Cyrillic'
    'Cp1252:Windows Latin-1'
    'Cp1253:Windows Greek'
    'Cp1254:Windows Turkish'
    'Cp1255:Windows Hebrew'
    'Cp1256:Windows Arabic'
    'Cp1257:Windows Baltic'
    'Cp1258:Windows Vietnamese'
    'Cp1381:IBM OS/2, DOS Peopl'\''es Republic of China (PRC)'
    'Cp1383:IBM AIX People'\''s Republic of China (PRC)'
    'Cp273:IBM Austria, Germany'
    'Cp277:IBM Denmark, Norway'
    'Cp278:IBM Finland, Sweden'
    'Cp280:IBM Italy'
    'Cp284:IBM Catalan/Spain, Spanish Latin America'
    'Cp285:IBM United Kingdom, Ireland'
    'Cp297:IBM France'
    'Cp33722:IBM-eucJP - Japanese (superset of 5050)'
    'Cp420:IBM Arabic'
    'Cp424:IBM Hebrew'
    'Cp437:MS-DOS United States, Australia, New Zealand, South Africa'
    'Cp500:EBCDIC 500V1'
    'Cp737:PC Greek'
    'Cp775:PC Baltic'
    'Cp838:IBM Thailand extended SBCS'
    'Cp850:MS-DOS Latin-1'
    'Cp852:MS-DOS Latin-2'
    'Cp855:IBM Cyrillic'
    'Cp857:IBM Turkish'
    'Cp860:MS-DOS Portuguese'
    'Cp861:MS-DOS Icelandic'
    'Cp862:PC Hebrew'
    'Cp863:MS-DOS Canadian French'
    'Cp864:PC Arabic'
    'Cp865:MS-DOS Nordic'
    'Cp866:MS-DOS Russian'
    'Cp868:MS-DOS Pakistan'
    'Cp869:IBM Modern Greek'
    'Cp870:IBM Multilingual Latin-2'
    'Cp871:IBM Iceland'
    'Cp874:IBM Thai'
    'Cp875:IBM Greek'
    'Cp918:IBM Pakistan(Urdu)'
    'Cp921:IBM Latvia, Lithuania (AIX, DOS)'
    'Cp922:IBM Estonia (AIX, DOS)'
    'Cp930:Japanese Katakana-Kanji mixed with 4370 UDC, superset of 5026'
    'Cp933:Korean Mixed with 1880 UDC, superset of 5029'
    'Cp935:Simplified Chinese Host mixed with 1880 UDC, superset of 5031'
    'Cp937:Traditional Chinese Host miexed with 6204 UDC, superset of 5033'
    'Cp939:Japanese Latin Kanji mixed with 4370 UDC, superset of 5035'
    'Cp942:Japanese (OS/2) superset of 932'
    'Cp948:OS/2 Chinese (Taiwan) superset of 938'
    'Cp949:PC Korean'
    'Cp950:PC Chinese (Hong Kong, Taiwan)'
    'Cp964:AIX Chinese (Taiwan)'
    'Cp970:AIX Korean'
    'EUCJIS:JIS, EUC Encoding, Japanese'
    'GB2312:GB2312, EUC encoding, Simplified Chinese'
    'GBK:GBK, Simplified Chinese'
    'ISO2022CN:ISO 2022 CN, Chinese'
    'ISO2022CN_CNS:CNS 11643 in ISO-2022-CN form, T. Chinese'
    'ISO2022CN_GB:GB 2312 in ISO-2022-CN form, S. Chinese'
    'ISO2022KR:ISO 2022 KR, Korean'
    'JIS:JIS, Japanese'
    'JIS0208:JIS 0208, Japanese'
    'KOI8_R:KOI8-R, Russian'
    'KSC5601:KS C 5601, Korean'
    'MS874:Windows Thai'
    'MacArabic:Macintosh Arabic'
    'MacCentralEurope:Macintosh Latin-2'
    'MacCroatian:Macintosh Croatian'
    'MacCyrillic:Macintosh Cyrillic'
    'MacDingbat:Macintosh Dingbat'
    'MacGreek:Macintosh Greek'
    'MacHebrew:Macintosh Hebrew'
    'MacIceland:Macintosh Iceland'
    'MacRoman:Macintosh Roman'
    'MacRomania:Macintosh Romania'
    'MacSymbol:Macintosh Symbol'
    'MacThai:Macintosh Thai'
    'MacTurkish:Macintosh Turkish'
    'MacUkraine:Macintosh Ukraine'
    'SJIS:Shift-JIS, Japanese'
    'UTF8:UTF-8'
  )
  _describe 'character encoding' tmp --
  ;;

property)
  if compset -P '*='; then
    _default && return
  else
    _message 'property name'
  fi
  ;;

class|doclet)
  match=()
  compset -P '(#b)(*.)'
  basedir=${match[1]//.//}
  _alternative \
    'classes:class:compadd $basedir*.class(.:t:s/.class//)' \
    'packages:package:compadd -qS. $basedir*~$basedir*.*(/:t)'
  ;;

docsrc)
  if compset -P @; then
    _wanted files expl 'package/source list file' _files && return
  else
    _wanted files expl 'package or source' _files -g '*.java' && return
  fi
  ;;

jararg)
  if [[ -prefix - ]]; then
    tmp=('-C:chdir')
    _describe -o 'option' tmp -- && return
  elif [[ "$words[CURRENT - 2]" == -C ]]; then
    _wanted file expl 'input file' _files -W "($words[CURRENT - 1])" && return
  elif [[ "$words[CURRENT - 1]" == -C ]]; then
    _wanted directories expl 'chdir to' _files -/ && return
  elif [[ $words[2] = *x* ]]; then
    jf="$words[3]"
    if [[ $jf != $_jar_cache_name && -f $jf ]]; then
      _jar_cache_list=("${(@f)$($words[1] tf $jf)}")
      _jar_cache_name=$jf
    fi

    _wanted files expl 'file from archive' _multi_parts / _jar_cache_list && return
  else
    _wanted files expl 'input file' _files && return
  fi
  ;;

*)
  _message "unknown state: $state"
  ;;
esac

return ret