Fix a bug in the recent alternate message selection logic, so "other" is always considered a valid form for an enum. Patch by: jat Review by: rjrjr git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9891 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java b/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java index 149e7cc..64ab988 100644 --- a/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java +++ b/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java
@@ -48,6 +48,7 @@ import com.google.gwt.i18n.rebind.MessageFormatParser.StaticArgChunk; import com.google.gwt.i18n.rebind.MessageFormatParser.StringChunk; import com.google.gwt.i18n.rebind.MessageFormatParser.TemplateChunk; +import com.google.gwt.i18n.shared.AlternateMessageSelector; import com.google.gwt.i18n.shared.GwtLocale; import com.google.gwt.safehtml.shared.OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml; import com.google.gwt.safehtml.shared.SafeHtml; @@ -275,7 +276,7 @@ } else { startedIfChain = true; } - if ("other".equals(value)) { + if (AlternateMessageSelector.OTHER_FORM_NAME.equals(value)) { out.println("{ // other"); } else { value = value.replace("\"", "\\\""); @@ -283,7 +284,7 @@ + ")) {"); } } else { - if ("other".equals(value)) { + if (AlternateMessageSelector.OTHER_FORM_NAME.equals(value)) { out.println("default: // other"); } else if (enumType != null) { JField field = enumType.findField(value); @@ -696,7 +697,7 @@ method.getEnclosingType().getOracle(), ruleClass, locale); missingPluralForms = new HashSet<String>(); for (PluralForm form : pluralRule.pluralForms()) { - if (form.getWarnIfMissing() && !"other".equals(form.getName())) { + if (form.getWarnIfMissing() && !AlternateMessageSelector.OTHER_FORM_NAME.equals(form.getName())) { missingPluralForms.add(form.getName()); } } @@ -808,7 +809,7 @@ out.println("switch (arg" + argNumber + "_form) {"); out.indent(); } - if ("other".equals(value)) { + if (AlternateMessageSelector.OTHER_FORM_NAME.equals(value)) { out.println("default: // other"); out.indent(); return; @@ -1254,8 +1255,7 @@ } @Override - public void visit(StringChunk stringChunk) - throws UnableToCompleteException { + public void visit(StringChunk stringChunk) { gen.appendStringLiteral(stringChunk.getString()); } }); @@ -1384,7 +1384,7 @@ for (String splitForm : splitForms) { if (splitForm.startsWith("=")) { allOther = false; - } else if (!"other".equals(splitForm)) { + } else if (!AlternateMessageSelector.OTHER_FORM_NAME.equals(splitForm)) { allOther = false; } } @@ -1474,7 +1474,7 @@ } @Override - public void visit(StaticArgChunk staticArgChunk) throws UnableToCompleteException { + public void visit(StaticArgChunk staticArgChunk) { buf.appendStringLiteral(staticArgChunk.getReplacement()); }
diff --git a/user/src/com/google/gwt/i18n/server/AbstractMessage.java b/user/src/com/google/gwt/i18n/server/AbstractMessage.java index f779996..92b41e0 100644 --- a/user/src/com/google/gwt/i18n/server/AbstractMessage.java +++ b/user/src/com/google/gwt/i18n/server/AbstractMessage.java
@@ -105,7 +105,7 @@ boolean allOther = true; for (int i = 0; i < forms.size(); ++i) { lastForm[i] = forms.get(i).getName(); - if (!"other".equals(lastForm[i])) { + if (!AlternateMessageSelector.OTHER_FORM_NAME.equals(lastForm[i])) { allOther = false; } } @@ -260,7 +260,7 @@ nonOther = false; break; } - if (isStringMap || !"other".equals(formName)) { + if (isStringMap || !AlternateMessageSelector.OTHER_FORM_NAME.equals(formName)) { nonOther = true; } forms.add(new AlternateForm(formName, formName)); @@ -354,7 +354,7 @@ }; } else { selectors[i] = params.get(selIdx).getAlternateMessageSelector(); - defaultForms.add(AlternateMessageSelector.OTHER); + defaultForms.add(AlternateMessageSelector.OTHER_FORM); } } }
diff --git a/user/src/com/google/gwt/i18n/server/AbstractParameter.java b/user/src/com/google/gwt/i18n/server/AbstractParameter.java index e7d2aec..5636702 100644 --- a/user/src/com/google/gwt/i18n/server/AbstractParameter.java +++ b/user/src/com/google/gwt/i18n/server/AbstractParameter.java
@@ -141,7 +141,7 @@ final String[] validValues = type.getEnumValues(); return new AlternateMessageSelector() { public boolean isFormAcceptable(String form) { - if (validValues == null) { + if (validValues == null || AlternateMessageSelector.OTHER_FORM_NAME.equals(form)) { return true; } for (String value : validValues) {
diff --git a/user/src/com/google/gwt/i18n/shared/AlternateMessageSelector.java b/user/src/com/google/gwt/i18n/shared/AlternateMessageSelector.java index d2456c3..5ea0591 100644 --- a/user/src/com/google/gwt/i18n/shared/AlternateMessageSelector.java +++ b/user/src/com/google/gwt/i18n/shared/AlternateMessageSelector.java
@@ -22,6 +22,11 @@ public interface AlternateMessageSelector { /** + * Name of the "other" form. + */ + public static final String OTHER_FORM_NAME = "other"; + + /** * Represents an alternate form of a message. */ public static class AlternateForm implements Comparable<AlternateForm> { @@ -105,7 +110,7 @@ } } - AlternateForm OTHER = new AlternateForm("other", + AlternateForm OTHER_FORM = new AlternateForm(OTHER_FORM_NAME, "Default value if no other forms apply"); /**
diff --git a/user/test/com/google/gwt/i18n/server/MessageInterfaceTestBase.java b/user/test/com/google/gwt/i18n/server/MessageInterfaceTestBase.java index 937d4c8..3a6d989 100644 --- a/user/test/com/google/gwt/i18n/server/MessageInterfaceTestBase.java +++ b/user/test/com/google/gwt/i18n/server/MessageInterfaceTestBase.java
@@ -24,6 +24,7 @@ import com.google.gwt.i18n.server.impl.ReflectionMessageInterface; import com.google.gwt.i18n.server.keygen.MD5KeyGenerator; import com.google.gwt.i18n.server.testing.Child; +import com.google.gwt.i18n.shared.AlternateMessageSelector; import com.google.gwt.i18n.shared.GwtLocale; import com.google.gwt.i18n.shared.AlternateMessageSelector.AlternateForm; @@ -58,7 +59,7 @@ break; case 11: assertEquals(0, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 19: // mutliSelect, first arg assertEquals(0, level); @@ -109,7 +110,7 @@ case 149: // other/one case 162: assertEquals(2, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 34: // mutliSelect, second arg case 64: // =1 @@ -117,7 +118,7 @@ case 124: // one case 154: // other assertEquals(1, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 49: // mutliSelect, first arg assertEquals(0, level); @@ -133,7 +134,7 @@ break; case 139: // mutliSelect, first arg assertEquals(0, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 178: // inheritedMap assertEquals(0, level); @@ -212,7 +213,7 @@ break; case 13: assertEquals(0, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 25: // mutliSelect, third arg case 38: @@ -251,7 +252,7 @@ case 151: // other/one case 164: assertEquals(2, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 33: // mutliSelect, second arg case 63: // =1 @@ -267,7 +268,7 @@ case 136: // one case 166: // other assertEquals(1, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 48: // mutliSelect, first arg assertEquals(0, level); @@ -287,7 +288,7 @@ break; case 168: // mutliSelect, first arg assertEquals(0, level); - assertEquals("other", formName); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formName); break; case 180: // inheritedMap assertEquals(0, level); @@ -467,7 +468,7 @@ selectorTracker.visitForms(formNames); boolean shouldBeDefault = true; for (String form : formNames) { - if (!"other".equals(form)) { + if (!AlternateMessageSelector.OTHER_FORM_NAME.equals(form)) { shouldBeDefault = false; break; } @@ -489,7 +490,7 @@ break; case 12: assertEquals(1, formNames.length); - assertEquals("other", formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); assertTrue(isDefault); assertEquals("{1} wants to sell their car", msg); break; @@ -511,28 +512,28 @@ assertEquals(3, formNames.length); assertEquals("=0", formNames[0]); assertEquals("one", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("Nobody liked their message", msg); break; case 37: assertEquals(3, formNames.length); assertEquals("=0", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("Nobody liked her {3} messages", msg); break; case 40: assertEquals(3, formNames.length); assertEquals("=0", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("Nobody liked his {3} messages", msg); break; case 43: assertEquals(3, formNames.length); assertEquals("=0", formNames[0]); - assertEquals("other", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("Nobody liked their {3} messages", msg); break; case 54: @@ -553,28 +554,28 @@ assertEquals(3, formNames.length); assertEquals("=1", formNames[0]); assertEquals("one", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1} liked their message", msg); break; case 67: assertEquals(3, formNames.length); assertEquals("=1", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("{1} liked her {3} messages", msg); break; case 70: assertEquals(3, formNames.length); assertEquals("=1", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("{1} liked his {3} messages", msg); break; case 73: assertEquals(3, formNames.length); assertEquals("=1", formNames[0]); - assertEquals("other", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1} liked their {3} messages", msg); break; case 84: @@ -595,28 +596,28 @@ assertEquals(3, formNames.length); assertEquals("=2", formNames[0]); assertEquals("one", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1} and {2} liked their message", msg); break; case 97: assertEquals(3, formNames.length); assertEquals("=2", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("{1} and {2} liked her {3} messages", msg); break; case 100: assertEquals(3, formNames.length); assertEquals("=2", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("{1} and {2} liked his {3} messages", msg); break; case 103: assertEquals(3, formNames.length); assertEquals("=2", formNames[0]); - assertEquals("other", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1} and {2} liked their {3} messages", msg); break; case 114: @@ -637,68 +638,68 @@ assertEquals(3, formNames.length); assertEquals("one", formNames[0]); assertEquals("one", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1}, {2}, and one other liked their message", msg); break; case 127: assertEquals(3, formNames.length); assertEquals("one", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("{1}, {2}, and one other liked her {3} messages", msg); break; case 130: assertEquals("one", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("{1}, {2}, and one other liked his {3} messages", msg); break; case 133: assertEquals(3, formNames.length); assertEquals("one", formNames[0]); - assertEquals("other", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1}, {2}, and one other liked their {3} messages", msg); break; case 144: assertEquals(3, formNames.length); - assertEquals("other", formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); assertEquals("one", formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("{1}, {2}, and {0} others liked her message", msg); break; case 147: assertEquals(3, formNames.length); - assertEquals("other", formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); assertEquals("one", formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("{1}, {2}, and {0} others liked his message", msg); break; case 150: assertEquals(3, formNames.length); - assertEquals("other", formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); assertEquals("one", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1}, {2}, and {0} others liked their message", msg); break; case 157: assertEquals(3, formNames.length); - assertEquals("other", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("FEMALE", formNames[2]); assertEquals("{1}, {2}, and {0} others liked her {3} messages", msg); break; case 160: - assertEquals("other", formNames[0]); - assertEquals("other", formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); assertEquals("MALE", formNames[2]); assertEquals("{1}, {2}, and {0} others liked his {3} messages", msg); break; case 163: assertEquals(3, formNames.length); - assertEquals("other", formNames[0]); - assertEquals("other", formNames[1]); - assertEquals("other", formNames[2]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[0]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[1]); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, formNames[2]); assertEquals("{1}, {2}, and {0} others liked their {3} messages", msg); break; case 173: @@ -854,7 +855,7 @@ mapping = formIter.next(); forms = mapping.getForms(); assertEquals(1, forms.size()); - assertEquals("other", forms.get(0).getName()); + assertEquals(AlternateMessageSelector.OTHER_FORM_NAME, forms.get(0).getName()); assertFalse(formIter.hasNext()); }