On Fri, 2 Dec 2022 16:42:57 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:
> According to [the > specification](https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/util/Properties.html#load(java.io.Reader)) > trailing whitespaces in the values of properties files are (somewhat > surprisingly) actually significant. > > We have multiple files in the JDK with trailing whitespaces in the values. > For most of this files, this is likely incorrect and due to oversight, but in > a few cases it might actually be intended (like "The value is: "). > > After a discussion in the PR for > [JDK-8295729](https://bugs.openjdk.org/browse/JDK-8295729), the consensus was > to replace valid trailing spaces with the corresponding unicode sequence, > `\u0020`. (And of course remove non-wanted trailing spaces.) > > Doing so has a dual benefit: > > 1) It makes it clear to everyone reading the code that there is a trailing > space and it is intended > > 2) It will allow us to remove all actual trailing space characters, and turn > on the corresponding check in jcheck to keep the properties files, just like > all other source code files, free of trailing spaces. > > Ultimately, the call of whether a trailing space is supposed to be there, or > is a bug, lies with the respective component teams owning these files. Thus I > have split up the set of properties files with trailing spaces in several > groups, to match the JDK teams, and open a JBS issue for each of them. This > issue is for code I believe belong with the serviceability team. Changes requested by cjplummer (Reviewer). src/jdk.jconsole/share/classes/sun/tools/jconsole/resources/messages_de.properties line 27: > 25: > 26: ONE_DAY=\ 1 Tag > 27: ONE_HOUR=\ 1 Stunde\u0020 Suggestion: ONE_HOUR=\ 1 Stunde src/jdk.jconsole/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties line 174: > 172: MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON=\u53D6\u6D88\u8BA2\u9605(&U) > 173: > MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON_TOOLTIP=\u505C\u6B62\u76D1\u542C\u901A\u77E5 > 174: > MANAGE_HOTSPOT_MBEANS_IN_COLON_=\u7BA1\u7406\u4EE5\u4E0B\u4F4D\u7F6E\u7684 > HotSpot MBean:\u0020 Suggestion: MANAGE_HOTSPOT_MBEANS_IN_COLON_=\u7BA1\u7406\u4EE5\u4E0B\u4F4D\u7F6E\u7684 HotSpot MBean: src/jdk.jdi/share/classes/com/sun/tools/jdi/resources/jdi_de.properties line 37: > 35: raw.description = Startet das Ziel mit einer vom Benutzer angegebenen > Befehlszeile und wird daran angeh\u00E4ngt > 36: sun.home = Home-Verzeichnis des SDK oder der Laufzeitumgebung, die zum > Starten der Anwendung verwendet wird > 37: sun.home.label = Home\u0020 Suggestion: sun.home.label = Home src/jdk.jdi/share/classes/com/sun/tools/jdi/resources/jdi_de.properties line 51: > 49: generic_attaching.address = Adresse zum Anh\u00E4ngen f\u00FCr > VM-Verbindungen > 50: generic_attaching.address.label = Adresse > 51: generic_attaching.timeout = Timeout beim Warten auf das > Anh\u00E4ngen\u0020 Suggestion: generic_attaching.timeout = Timeout beim Warten auf das Anh\u00E4ngen src/jdk.jdi/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties line 37: > 35: raw.description = > \u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u3092\u4F7F\u7528\u3057\u3066\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u8D77\u52D5\u3057\u3001\u63A5\u7D9A\u3057\u307E\u3059 > 36: sun.home = > SDK\u306E\u30DB\u30FC\u30E0\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u307E\u305F\u306F\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u8D77\u52D5\u306B\u4F7F\u7528\u3055\u308C\u308B\u5B9F\u884C\u74B0\u5883 > 37: sun.home.label = \u30DB\u30FC\u30E0\u0020 Suggestion: sun.home.label = \u30DB\u30FC\u30E0 src/jdk.jdi/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties line 51: > 49: generic_attaching.address = > VM\u306B\u63A5\u7D9A\u3059\u308B\u30A2\u30C9\u30EC\u30B9 > 50: generic_attaching.address.label = \u30A2\u30C9\u30EC\u30B9 > 51: generic_attaching.timeout = > \u63A5\u7D9A\u3092\u5F85\u3064\u9593\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u0020 Suggestion: generic_attaching.timeout = \u63A5\u7D9A\u3092\u5F85\u3064\u9593\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 src/jdk.jdi/share/classes/com/sun/tools/jdi/resources/jdi_zh_CN.properties line 37: > 35: raw.description = > \u4F7F\u7528\u7528\u6237\u6307\u5B9A\u7684\u547D\u4EE4\u884C\u542F\u52A8\u76EE\u6807\u5E76\u9644\u52A0\u5230\u8BE5\u76EE\u6807 > 36: sun.home = \u7528\u4E8E\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F\u7684 SDK > \u6216\u8FD0\u884C\u65F6\u73AF\u5883\u7684\u4E3B\u76EE\u5F55 > 37: sun.home.label = \u4E3B\u76EE\u5F55\u0020 Suggestion: sun.home.label = \u4E3B\u76EE\u5F55 src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent.properties line 27: > 25: > 26: agent.err.error = Error > 27: agent.err.exception = Exception thrown by the agent\u0020 Suggestion: agent.err.exception = Exception thrown by the agent src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Management agent class not found > 38: agent.err.agentclass.failed = Management agent class failed\u0020 Suggestion: agent.err.agentclass.failed = Management agent class failed src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_de.properties line 27: > 25: > 26: agent.err.error = Fehler > 27: agent.err.exception = Ausnahme von Agent > ausgel\u00F6st\u0020 Suggestion: agent.err.exception = Ausnahme von Agent ausgel\u00F6st src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_es.properties line 27: > 25: > 26: agent.err.error = Error > 27: agent.err.exception = Excepci\u00F3n devuelta por el > agente\u0020 Suggestion: agent.err.exception = Excepci\u00F3n devuelta por el agente src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_es.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Clase de agente de gesti\u00F3n no > encontrada > 38: agent.err.agentclass.failed = Fallo de clase de agente de > gesti\u00F3n\u0020 Suggestion: agent.err.agentclass.failed = Fallo de clase de agente de gesti\u00F3n src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_fr.properties line 27: > 25: > 26: agent.err.error = Erreur > 27: agent.err.exception = Exception envoy\u00E9e par > l'agent\u0020 Suggestion: agent.err.exception = Exception envoy\u00E9e par l'agent src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_fr.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Classe d'agents de gestion > introuvable > 38: agent.err.agentclass.failed = Echec de la classe d'agents de > gestion\u0020 Suggestion: agent.err.agentclass.failed = Echec de la classe d'agents de gestion src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_it.properties line 27: > 25: > 26: agent.err.error = Errore > 27: agent.err.exception = Eccezione dell'agente\u0020 Suggestion: agent.err.exception = Eccezione dell'agente src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_it.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Classe agente gestione non trovata > 38: agent.err.agentclass.failed = Errore classe agente gestione\u0020 Suggestion: agent.err.agentclass.failed = Errore classe agente gestione src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_ja.properties line 27: > 25: > 26: agent.err.error = \u30A8\u30E9\u30FC > 27: agent.err.exception = > \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u4F8B\u5916\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F\u0020 Suggestion: agent.err.exception = \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u4F8B\u5916\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_ja.properties line 38: > 36: > 37: agent.err.agentclass.notfound = > \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 > 38: agent.err.agentclass.failed = > \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u0020 Suggestion: agent.err.agentclass.failed = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u5931\u6557\u3057\u307E\u3057\u305F src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_ko.properties line 27: > 25: > 26: agent.err.error = \uC624\uB958 > 27: agent.err.exception = \uC5D0\uC774\uC804\uD2B8\uC5D0 > \uC608\uC678\uC0AC\uD56D\uC774 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\u0020 Suggestion: agent.err.exception = \uC5D0\uC774\uC804\uD2B8\uC5D0 \uC608\uC678\uC0AC\uD56D\uC774 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_ko.properties line 38: > 36: > 37: agent.err.agentclass.notfound = \uAD00\uB9AC > \uC5D0\uC774\uC804\uD2B8 \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 > \uC5C6\uC2B5\uB2C8\uB2E4. > 38: agent.err.agentclass.failed = \uAD00\uB9AC > \uC5D0\uC774\uC804\uD2B8 \uD074\uB798\uC2A4\uB97C > \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.\u0020 Suggestion: agent.err.agentclass.failed = \uAD00\uB9AC \uC5D0\uC774\uC804\uD2B8 \uD074\uB798\uC2A4\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_pt_BR.properties line 27: > 25: > 26: agent.err.error = Erro > 27: agent.err.exception = Exce\u00E7\u00E3o gerada pelo > agente\u0020 Suggestion: agent.err.exception = Exce\u00E7\u00E3o gerada pelo agente src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_pt_BR.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Classe do agente de gerenciamento > n\u00E3o encontrada > 38: agent.err.agentclass.failed = Falha na classe do agente de > gerenciamento\u0020 Suggestion: agent.err.agentclass.failed = Falha na classe do agente de gerenciamento src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_sv.properties line 27: > 25: > 26: agent.err.error = Fel > 27: agent.err.exception = Agenten orsakade ett undantag\u0020 Suggestion: agent.err.exception = Agenten orsakade ett undantag src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_sv.properties line 38: > 36: > 37: agent.err.agentclass.notfound = Administrationsagentklassen hittades > inte > 38: agent.err.agentclass.failed = Administrationsagentklassen > utf\u00F6rdes inte\u0020 Suggestion: agent.err.agentclass.failed = Administrationsagentklassen utf\u00F6rdes inte src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_zh_CN.properties line 38: > 36: > 37: agent.err.agentclass.notfound = > \u627E\u4E0D\u5230\u7BA1\u7406\u4EE3\u7406\u7C7B > 38: agent.err.agentclass.failed = > \u7BA1\u7406\u4EE3\u7406\u7C7B\u5931\u8D25\u0020 Suggestion: agent.err.agentclass.failed = \u7BA1\u7406\u4EE3\u7406\u7C7B\u5931\u8D25 src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_zh_CN.properties line 67: > 65: agent.err.invalid.option = \u6307\u5B9A\u7684\u9009\u9879\u65E0\u6548 > 66: > 67: jmxremote.ConnectorBootstrap.starting = \u6B63\u5728\u542F\u52A8 JMX > \u8FDE\u63A5\u5668\u670D\u52A1\u5668:\u0020 Suggestion: jmxremote.ConnectorBootstrap.starting = \u6B63\u5728\u542F\u52A8 JMX \u8FDE\u63A5\u5668\u670D\u52A1\u5668: src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_zh_TW.properties line 27: > 25: > 26: agent.err.error = \u932F\u8AA4 > 27: agent.err.exception = > \u4EE3\u7406\u7A0B\u5F0F\u767C\u751F\u7570\u5E38\u0020 Suggestion: agent.err.exception = \u4EE3\u7406\u7A0B\u5F0F\u767C\u751F\u7570\u5E38 src/jdk.management.agent/share/classes/jdk/internal/agent/resources/agent_zh_TW.properties line 38: > 36: > 37: agent.err.agentclass.notfound = > \u627E\u4E0D\u5230\u7BA1\u7406\u4EE3\u7406\u7A0B\u5F0F\u985E\u5225 > 38: agent.err.agentclass.failed = > \u7BA1\u7406\u4EE3\u7406\u7A0B\u5F0F\u985E\u5225\u5931\u6557\u0020 Suggestion: agent.err.agentclass.failed = \u7BA1\u7406\u4EE3\u7406\u7A0B\u5F0F\u985E\u5225\u5931\u6557 ------------- PR: https://git.openjdk.org/jdk/pull/11490