From 65e95d022448285c6547d90d5d9100715bbe0be5 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe Date: Sun, 14 Nov 2010 21:32:08 +0000 Subject: [PATCH] reverting change introduced in 1035003: it was the javadoc that did not correspond to the intended behavior, not the code git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1035072 13f79535-47bb-0310-9956-ffa450edef68 --- .../math/exception/util/MessageFactory.java | 35 +++++-------------- .../exception/util/MessageFactoryTest.java | 9 +++-- 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/apache/commons/math/exception/util/MessageFactory.java b/src/main/java/org/apache/commons/math/exception/util/MessageFactory.java index 73884f40d..0e8cf14ea 100644 --- a/src/main/java/org/apache/commons/math/exception/util/MessageFactory.java +++ b/src/main/java/org/apache/commons/math/exception/util/MessageFactory.java @@ -52,42 +52,25 @@ public class MessageFactory { * @param locale Locale in which the message should be translated. * @param specific Format specifier (may be null). * @param general Format specifier (may be null). - * @param arguments Format arguments. They will be substituted first in - * the {@code specific} format specifier, then the remaining arguments - * will be substituted in the {@code general} format specifier. + * @param arguments Format arguments. They will be substituted in + * both the {@code general} and {@code specific} format specifiers. * @return a localized message string. */ public static String buildMessage(Locale locale, Localizable specific, Localizable general, Object ... arguments) { - final StringBuilder sb = new StringBuilder(); - Object[] generalArgs = arguments; - - if (specific != null) { - - final MessageFormat specificFmt = new MessageFormat(specific.getLocalizedString(locale), locale); - - // split the arguments: first specific ones then general ones - final int nbSpecific = Math.min(arguments.length, specificFmt.getFormatsByArgumentIndex().length); - final int nbGeneral = arguments.length - nbSpecific; - Object[] specificArgs = new Object[nbSpecific]; - System.arraycopy(arguments, 0, specificArgs, 0, nbSpecific); - generalArgs = new Object[nbGeneral]; - System.arraycopy(arguments, nbSpecific, generalArgs, 0, nbGeneral); - - // build the message - sb.append(specificFmt.format(specificArgs)); - - } - if (general != null) { - if (specific != null) { + final MessageFormat fmt = new MessageFormat(general.getLocalizedString(locale), locale); + sb.append(fmt.format(arguments)); + } + if (specific != null) { + if (general != null) { sb.append(": "); } - final MessageFormat generalFmt = new MessageFormat(general.getLocalizedString(locale), locale); - sb.append(generalFmt.format(generalArgs)); + final MessageFormat fmt = new MessageFormat(specific.getLocalizedString(locale), locale); + sb.append(fmt.format(arguments)); } return sb.toString(); diff --git a/src/test/java/org/apache/commons/math/exception/util/MessageFactoryTest.java b/src/test/java/org/apache/commons/math/exception/util/MessageFactoryTest.java index 5fa0668f3..d0d147c86 100644 --- a/src/test/java/org/apache/commons/math/exception/util/MessageFactoryTest.java +++ b/src/test/java/org/apache/commons/math/exception/util/MessageFactoryTest.java @@ -29,26 +29,25 @@ public class MessageFactoryTest { Localizable general = new DummyLocalizable("general {0} / {1}"); String message = MessageFactory.buildMessage(Locale.FRENCH, specific, general, 0, 1, 2, 'a', 'b'); - Assert.assertEquals("specific 0 - 1 - 2: general a / b", message); + Assert.assertEquals("general 0 / 1: specific 0 - 1 - 2", message); } @Test public void testNullSpecific() { Localizable general = new DummyLocalizable("general {0} / {1}"); String message = MessageFactory.buildMessage(Locale.FRENCH, null, general, - 'a', 'b'); - Assert.assertEquals("general a / b", message); + 0, 1, 2, 'a', 'b'); + Assert.assertEquals("general 0 / 1", message); } @Test public void testNullGeneral() { Localizable specific = new DummyLocalizable("specific {0} - {1} - {2}"); String message = MessageFactory.buildMessage(Locale.FRENCH, specific, null, - 0, 1, 2); + 0, 1, 2, 'a', 'b'); Assert.assertEquals("specific 0 - 1 - 2", message); } - @Test public void testNull() { String message = MessageFactory.buildMessage(Locale.FRENCH, null, null, "nothing");