[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR: 8298046: Fix hidden but significant trailing whitespace in properties files for serviceabil
From:       Chris Plummer <cjplummer () openjdk ! org>
Date:       2022-12-02 21:28:23
Message-ID: anXdaiNVIHXjLYvfuEhGAtL9fOUR1mjPsW_FXGpNvGk=.99608bfe-6540-473f-8168-2b05c3223941 () github ! com
[Download RAW message or body]

On Fri, 2 Dec 2022 16:42:57 GMT, Magnus Ihse Bursie <ihse@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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic