On Mon, 11 Apr 2022 05:31:49 GMT, Koichi Sakata <ksak...@openjdk.org> wrote:

> # Summary
> Running jdeprscan with --help option causes an exception on any OSs when the 
> locale is ja, zh_CN or de.
> 
> # How to reproduce this issue
> 
> $ jdeprscan -J-Duser.language=ja --help
> Exception in thread "main" java.lang.IllegalArgumentException: can't parse 
> argument number: dir|jar|class
>         at 
> java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1454)
>         at 
> java.base/java.text.MessageFormat.applyPattern(MessageFormat.java:492)
>         at java.base/java.text.MessageFormat.<init>(MessageFormat.java:371)
>         at java.base/java.text.MessageFormat.format(MessageFormat.java:860)
>         at jdk.jdeps/com.sun.tools.jdeprscan.Messages.get(Messages.java:62)
>         at jdk.jdeps/com.sun.tools.jdeprscan.Main.printHelp(Main.java:706)
>         at jdk.jdeps/com.sun.tools.jdeprscan.Main.run(Main.java:529)
>         at jdk.jdeps/com.sun.tools.jdeprscan.Main.call(Main.java:717)
>         at jdk.jdeps/com.sun.tools.jdeprscan.Main.main(Main.java:725)
> Caused by: java.lang.NumberFormatException: For input string: "dir|jar|class"
>         at 
> java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
>         at java.base/java.lang.Integer.parseInt(Integer.java:668)
>         at java.base/java.lang.Integer.parseInt(Integer.java:786)
>         at 
> java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1452)
>         ... 8 more
> 
> $ jdeprscan -J-Duser.language=zh -J-Duser.country=CN --help
> (Same as above)
> 
> $ jdeprscan -J-Duser.language=de --help
> (Same as above)
> 
> Of course, it works well when the locale is anything other than those locales.
> 
> # Details
> I found **''**{dir|jar|class}**''** in both ja and zh_CN properties files. 
> Doubled single quotes mean a single quote in MessageFormat class, so the 
> class recognizes {dir|jar|class} as a FormatElement and throws the exception. 
> 
> I removed extra single quotes.
> 
> # Test
> It seems there is no test class for it. So I run commands as I mentioned 
> before.
> 
> $ jdeprscan -J-Duser.language=ja --help
> 使用方法: jdeprscan [options] {dir|jar|class} ...
> 
> オプション:
>         --class-path PATH
>         --for-removal
>         --full-version
>   -? -h --help
>   -l    --list
>         --release 7|8|9|10|11|12|13|14|15|16|17|18|19
>   -v    --verbose
>         --version
> 
> 非推奨APIの使用について各引数をスキャンします。引数には、
> パッケージ階層のルートを指定するディレクトリ、JARファイル、
> クラス・ファイルまたはクラス名を使用できます。クラス名は、
> 完全修飾クラス名を使用して指定する必要があります。ネストされた
> クラスは$で区切ります。例:
> 
>     java.lang.Thread$State
> 
> --class-pathオプションは、依存するクラスの解決のための
> 検索パスを指定します。
> 
> --for-removalオプションは、スキャンとリスト化を削除予定で非推奨のAPIに
> 限定します。リリース値が6、7または8の場合は使用できません。
> 
> --full-versionオプションはツールのバージョン文字列の全体を出力します。
> 
> --help (-? -h)オプションは、ヘルプ・メッセージ全体を出力します。
> 
> --list (-l)オプションは非推奨APIセットを出力します。スキャンは行われないため、
> ディレクトリ、JARまたはクラス引数を指定する必要はありません。
> 
> --releaseオプションは、スキャンする非推奨APIのセットを提供するJava SE
> リリースを指定します。
> 
> --verbose (-v)オプションを使用すると、処理中に追加のメッセージを出力できます。
> 
> --versionオプションは、簡略化されたツールのバージョン文字列を出力します。
> 
> $ jdeprscan -J-Duser.language=zh -J-Duser.country=CN --help
> 用法:jdeprscan [options] {dir|jar|class} ...
> 
> 选项:
>         --class-path PATH
>         --for-removal
>         --full-version
>   -? -h --help
>   -l    --list
>         --release 7|8|9|10|11|12|13|14|15|16|17|18|19
>   -v    --verbose
>         --version
> 
> 扫描每个参数以了解是否使用了过时的 API。
> 参数可以是指定程序包分层结构、JAR 文件、
> 类文件或类名的根的目录。类名必须
> 使用全限定类名指定,并使用 $ 分隔符
> 指定嵌套类,例如,
> 
>     java.lang.Thread$State
> 
> --class-path 选项提供了用于解析从属类的
> 搜索路径。
> 
> --for-removal 选项限制扫描或列出已过时并待删除
> 的 API。不能与发行版值 6、7 或 8 一起使用。
> 
> --full-version 选项输出工具的完整版本字符串。
> 
> --help (-? -h) 选项输出完整的帮助消息。
> 
> --list (-l) 选项输出一组已过时的 API。不执行扫描,
> 因此不应提供任何目录、jar 或类参数。
> 
> --release 选项指定提供要扫描的已过时 API 集
> 的 Java SE 发行版。
> 
> --verbose (-v) 选项在处理期间启用附加消息输出。
> 
> --version 选项输出工具的缩写版本字符串。
> 
> $ jdeprscan -J-Duser.language=de --help
> Verwendung: jdeprscan [Optionen] {dir|jar|class} ...
> 
> Optionen:
>         --class-path PATH
>         --for-removal
>         --full-version
>   -? -h --help
>   -l    --list
>         --release 7|8|9|10|11|12|13|14|15|16|17|18|19
>   -v    --verbose
>         --version
> 
> Scannt jedes Argument auf die Verwendung veralteter APIs. Ein Argument
> kann ein Verzeichnis, das die Root einer Packagehierarchie angibt,
> eine JAR-Datei, eine Klassendatei oder ein Klassenname sein. Der Klassenname
> muss durch einen vollständig qualifizierten Klassennamen mit $ als 
> Trennzeichen
> für verschachtelte Klassen angegeben werden. Beispiel:
> 
>     java.lang.Thread$State
> 
> Die Option --class-path liefert einen Suchpfad für die Auflösung
> von abhängigen Klassen.
> 
> Die Option --for-removal begrenzt das Scannen oder Auflisten auf APIs, die 
> veraltet sind
> und entfernt werden sollen. Kann nicht mit den Releasewerten 6, 7, oder 8 
> verwendet werden.
> 
> Die Option --full-version gibt die vollständige Versionszeichenfolge des 
> Tools aus.
> 
> Die Option --help (-? -h) gibt eine vollständige Hilfemeldung aus.
> 
> Die Option --list (-l) gibt die Gruppe der veralteten APIs aus. Es wird nicht 
> gescannt,
> daher dürfen keine Verzeichnis-, JAR- oder Klassenargumente angegeben werden.
> 
> Die Option --release gibt das Java SE-Release an, das die Gruppe
> der veralteten APIS zum Scannen liefert.
> 
> Die Option --verbose (-v) aktiviert die Ausgabe zusätzlicher Meldungen 
> während der Verarbeitung.
> 
> Die Option --version gibt die verkürzte Versionszeichenfolge des Tools aus.
> 
> $ jdeprscan -J-Duser.language=en --help                    
> Usage: jdeprscan [options] {dir|jar|class} ...
> 
> options:
>         --class-path PATH
>         --for-removal
>         --full-version
>   -? -h --help
>   -l    --list
>         --release 7|8|9|10|11|12|13|14|15|16|17|18|19
>   -v    --verbose
>         --version
> 
> Scans each argument for usages of deprecated APIs. An argument
> may be a directory specifying the root of a package hierarchy,
> a JAR file, a class file, or a class name. The class name must be
> specified using a fully qualified class name using the $ separator
> character for nested classes, for example,
> 
>     java.lang.Thread$State
> 
> The --class-path option provides a search path for resolution
> of dependent classes.
> 
> The --for-removal option limits scanning or listing to APIs that are
> deprecated for removal. Cannot be used with a release value of 6, 7, or 8.
> 
> The --full-version option prints out the full version string of the tool.
> 
> The --help (-? -h) option prints out a full help message.
> 
> The --list (-l) option prints out the set of deprecated APIs. No scanning is 
> done,
> so no directory, jar, or class arguments should be provided.
> 
> The --release option specifies the Java SE release that provides the set
> of deprecated APIs for scanning.
> 
> The --verbose (-v) option enables additional message output during processing.
> 
> The --version option prints out the abbreviated version string of the tool.

This pull request has now been integrated.

Changeset: ef25e189
Author:    Koichi Sakata <ksak...@openjdk.org>
Committer: Naoto Sato <na...@openjdk.org>
URL:       
https://git.openjdk.java.net/jdk/commit/ef25e189c7f987b6c7b049ce481ee832cc7f70aa
Stats:     3 lines in 3 files changed: 0 ins; 0 del; 3 mod

8283870: jdeprscan --help causes an exception when the locale is ja, zh_CN or de

Reviewed-by: naoto

-------------

PR: https://git.openjdk.java.net/jdk/pull/8174

Reply via email to