Skip to content

Commit 91a742b

Browse files
authored
Merge pull request #62 from salesforce/fix-dictionary
fix severe error for Haitian-Creole declension
2 parents 23f2eb2 + df5765e commit 91a742b

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

src/main/java/com/force/i18n/grammar/Adjective.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.Set;
1414
import java.util.logging.Logger;
1515

16+
import com.force.i18n.commons.text.TextUtil;
1617
import com.google.common.collect.ImmutableSet;
1718
/**
1819
* An adjective or other noun modifier as stored in a LanguageDictionary.
@@ -32,6 +33,9 @@ public abstract class Adjective extends NounModifier {
3233
@Override
3334
public abstract Map<? extends AdjectiveForm, String> getAllValues();
3435

36+
/**
37+
* @deprecated use {@link #Adjective(LanguageDeclention, String, LanguagePosition)}
38+
*/
3539
@Deprecated
3640
protected Adjective(LanguageDeclension declension, String name) {
3741
this(declension, name, declension.getDefaultAdjectivePosition());
@@ -53,11 +57,25 @@ public final String getString(ModifierForm form) {
5357
return getString((AdjectiveForm)form);
5458
}
5559

60+
private String getDefaultValue(boolean doFallback) {
61+
String defaultValue = getString(getDeclension().getAdjectiveForm(getDeclension().getDefaultStartsWith(),
62+
getDeclension().getDefaultGender(), LanguageNumber.SINGULAR, getDeclension().getDefaultCase(),
63+
getDeclension().getDefaultArticle(), getDeclension().getDefaultPossessive()));
64+
if (defaultValue != null || !doFallback) return defaultValue;
65+
66+
// not perfect, but trying to return something instead of null
67+
for (String val : this.getAllValues().values()) {
68+
if (!TextUtil.isNullEmptyOrWhitespace(val)) {
69+
// error should be already logged by defaultValidate
70+
return val;
71+
}
72+
}
73+
return null; // something went wrong
74+
}
75+
5676
@Override
5777
public String getDefaultValue() {
58-
return getString(getDeclension().getAdjectiveForm(getDeclension().getDefaultStartsWith(),
59-
getDeclension().getDefaultGender(), LanguageNumber.SINGULAR,
60-
getDeclension().getDefaultCase(), getDeclension().getDefaultArticle(), getDeclension().getDefaultPossessive()));
78+
return getDefaultValue(true);
6179
}
6280

6381
/**
@@ -118,7 +136,7 @@ public boolean defaultValidate(String name, Set<? extends AdjectiveForm> require
118136
for (AdjectiveForm form : getDeclension().getAdjectiveForms()) {
119137
if (getString(form) == null) {
120138
if (requiredForms.contains(form)) {
121-
logger.fine("###\tError: The adjective " + name + " is missing required " + form + " form");
139+
logger.fine(() -> "###\tError: The adjective " + name + " is missing required " + form + " form");
122140
// TODO: uncomment the return false below once we actually handle validation
123141
// Presently, the return value is simply ignored
124142
// return false;
@@ -171,10 +189,10 @@ public boolean defaultValidate(String name, Set<? extends AdjectiveForm> require
171189
// so default to the absolute default value
172190
s = getDefaultValue();
173191
if (s == null) {
174-
logger.fine("###\tError: The adjective " + name + " has no " + form + " form and no default could be found");
192+
logger.fine(() -> "###\tError: The adjective " + name + " has no " + form + " form and no default could be found");
175193
return false;
176194
} else {
177-
logger.fine("###\tError: The adjective " + name + " has no obvious default for " + form + "form");
195+
logger.fine(() -> "###\tError: The adjective " + name + " has no obvious default for " + form + "form");
178196
}
179197
}
180198

src/main/java/com/force/i18n/grammar/ArticledDeclension.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ protected void setString(ArticleForm form, String value) {
134134
@Override
135135
public boolean validate(String name) {
136136
if (this.value == null) {
137-
logger.info("###\tError: The article " + name + " has no form");
137+
HumanLanguage language = this.getDeclension().getLanguage();
138+
logger.info(() -> "###\tError: " + language + "The article " + name + " has no form");
138139
return false;
139140
}
140141
return true;
@@ -168,7 +169,10 @@ public Map<? extends NounForm, String> getAllDefinedValues() {
168169

169170
@Override
170171
public String getDefaultString(boolean isPlural) {
171-
return isPlural && plural != null ? plural : singular;
172+
if (isPlural && plural != null) return plural;
173+
174+
// there's a corner case that dictionary has only plural form. try to return non-null
175+
return singular != null ? singular : plural;
172176
}
173177

174178
@Override
@@ -187,14 +191,12 @@ protected void setString(String value, NounForm form) {
187191
value = intern(value);
188192
if (form.getNumber().isPlural()) {
189193
this.plural = value;
190-
if (value != null && value.equals(this.singular))
191-
{
194+
if (value != null && value.equals(this.singular)) {
192195
this.singular = value; // Keep one reference for serialization
193196
}
194197
} else {
195198
this.singular = value;
196-
if (value != null && value.equals(this.plural))
197-
{
199+
if (value != null && value.equals(this.plural)) {
198200
this.plural = value; // Keep one reference for serialization
199201
}
200202
}
@@ -203,7 +205,7 @@ protected void setString(String value, NounForm form) {
203205
@Override
204206
protected boolean validateValues(String name, LanguageCase _case) {
205207
if (this.singular == null) {
206-
logger.info("###\tError: The noun " + name + " has no singular form");
208+
logger.info(() -> "###\tError: The noun " + name + " has no singular form");
207209
return false;
208210
}
209211
return true;

src/main/java/com/force/i18n/grammar/impl/SimpleDeclension.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,9 @@ protected void setString(String value, NounForm form) {
9090
protected boolean validateValues(String name, LanguageCase _case) {
9191
///CLOVER:OFF
9292
if (this.value == null) {
93-
// this is wrong. the noun should have singular form
94-
logger.severe("###\tError: The noun " + name + " has no value");
93+
// this is wrong. the noun should have singular form
94+
HumanLanguage language = this.getDeclension().getLanguage();
95+
logger.severe(() -> "###\tError: " + language.getLocaleString() + "The noun " + name + " has no value");
9596
return false;
9697
}
9798
///CLOVER:ON

0 commit comments

Comments
 (0)