Repository: commons-text Updated Branches: refs/heads/master 322fe2723 -> 4c29a73b0
Correctly handle null varargs in AggregateTranslator constructor The previous code didn't handle null vararg parameters correctly and would throw a NPE if passed a null CharSequenceTranslator object. While updating the unit tests to verify this, I adjusted the tests so that reflection isn't used. Project: http://git-wip-us.apache.org/repos/asf/commons-text/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-text/commit/4c29a73b Tree: http://git-wip-us.apache.org/repos/asf/commons-text/tree/4c29a73b Diff: http://git-wip-us.apache.org/repos/asf/commons-text/diff/4c29a73b Branch: refs/heads/master Commit: 4c29a73b03f93eec9c8e2d47b8d4b65b7db9f136 Parents: 322fe27 Author: duncan <dun...@wortharead.com> Authored: Wed Dec 21 09:02:09 2016 +0000 Committer: duncan <dun...@wortharead.com> Committed: Wed Dec 21 09:02:09 2016 +0000 ---------------------------------------------------------------------- .../commons/text/translate/AggregateTranslator.java | 12 ++++++++---- .../text/translate/AggregateTranslatorTest.java | 16 ++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-text/blob/4c29a73b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java index 74eb6de..010ab2a 100644 --- a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java +++ b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java @@ -18,6 +18,8 @@ package org.apache.commons.text.translate; import java.io.IOException; import java.io.Writer; +import java.util.ArrayList; +import java.util.List; /** * Executes a sequence of translators one after the other. Execution ends whenever @@ -27,7 +29,7 @@ import java.io.Writer; */ public class AggregateTranslator extends CharSequenceTranslator { - private final CharSequenceTranslator[] translators; + private final List<CharSequenceTranslator> translators = new ArrayList<>(); /** * Specify the translators to be used at creation time. @@ -36,9 +38,11 @@ public class AggregateTranslator extends CharSequenceTranslator { */ public AggregateTranslator(final CharSequenceTranslator... translators) { if (translators != null) { - this.translators = translators.clone(); - } else { - this.translators = null; + for (CharSequenceTranslator translator : translators) { + if (translator != null) { + this.translators.add(translator); + } + } } } http://git-wip-us.apache.org/repos/asf/commons-text/blob/4c29a73b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java index 6ac6622..5335396 100644 --- a/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java +++ b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java @@ -20,10 +20,8 @@ import org.junit.Test; import java.io.IOException; import java.io.StringWriter; -import java.lang.reflect.Field; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; /** * Unit tests for {@link org.apache.commons.text.translate.AggregateTranslator}. @@ -31,11 +29,17 @@ import static org.junit.Assert.assertNull; public class AggregateTranslatorTest { @Test - public void testNullConstructor() throws NoSuchFieldException, IllegalAccessException { + public void testNullConstructor() throws Exception { + final String testString = "foo"; final AggregateTranslator subject = new AggregateTranslator((CharSequenceTranslator[]) null); - final Field field = AggregateTranslator.class.getDeclaredField("translators"); - field.setAccessible(Boolean.TRUE); - assertNull(field.get(subject)); + assertEquals(testString, subject.translate(testString)); + } + + @Test + public void testNullVarargConstructor() throws Exception { + final String testString = "foo"; + final AggregateTranslator subject = new AggregateTranslator((CharSequenceTranslator) null); + assertEquals(testString, subject.translate(testString)); } @Test