@@ -155,14 +155,20 @@ class SerializedLocalizationWriter {
155155
156156class LocalizationProducer {
157157public:
158- // / If the message isn't available/localized in the current `yaml` file,
158+ // / If the message isn't available/localized in current context
159159 // / return the fallback default message.
160160 virtual llvm::StringRef getMessageOr (swift::DiagID id,
161161 llvm::StringRef defaultMessage) const {
162- return defaultMessage;
162+ auto message = getMessage (id);
163+ return message.empty () ? defaultMessage : message;
163164 }
164165
165166 virtual ~LocalizationProducer () {}
167+
168+ protected:
169+ // / Retrieve a message for the given diagnostic id.
170+ // / \returns empty string if message couldn't be found.
171+ virtual llvm::StringRef getMessage (swift::DiagID id) const = 0;
166172};
167173
168174class YAMLLocalizationProducer final : public LocalizationProducer {
@@ -172,14 +178,15 @@ class YAMLLocalizationProducer final : public LocalizationProducer {
172178 // / The diagnostics IDs that are no longer available in `.def`
173179 std::vector<std::string> unknownIDs;
174180 explicit YAMLLocalizationProducer (llvm::StringRef filePath);
175- llvm::StringRef getMessageOr (swift::DiagID id,
176- llvm::StringRef defaultMessage) const override ;
177181
178182 // / Iterate over all of the available (non-empty) translations
179183 // / maintained by this producer, callback gets each translation
180184 // / with its unique identifier.
181185 void forEachAvailable (
182186 llvm::function_ref<void (swift::DiagID, llvm::StringRef)> callback) const ;
187+
188+ protected:
189+ llvm::StringRef getMessage (swift::DiagID id) const override ;
183190};
184191
185192class SerializedLocalizationProducer final : public LocalizationProducer {
@@ -193,8 +200,8 @@ class SerializedLocalizationProducer final : public LocalizationProducer {
193200 explicit SerializedLocalizationProducer (
194201 std::unique_ptr<llvm::MemoryBuffer> buffer);
195202
196- llvm::StringRef getMessageOr (swift::DiagID id,
197- llvm::StringRef defaultMessage ) const override ;
203+ protected:
204+ llvm::StringRef getMessage (swift::DiagID id ) const override ;
198205};
199206
200207class LocalizationInput : public llvm ::yaml::Input {
0 commit comments