Skip to content

Commit 20dcf58

Browse files
committed
ArrayToStringConverter: support {null} case
Avoid throwing an NPE if given a String[] containing a null value. Closes #444
1 parent 1b0498e commit 20dcf58

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

src/main/java/org/scijava/convert/ArrayToStringConverter.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,22 @@ private String[] preprocessStrings(final Object src) {
9393
}
9494

9595
private String preprocessString(final Object o) {
96-
String s = o.toString();
97-
s = s.replace("\\", "\\\\");
98-
s = s.replace("\"", "\\\"");
96+
String s;
97+
if (o == null) {
98+
return null;
99+
} else {
100+
s = o.toString();
101+
s = s.replace("\\", "\\\\");
102+
s = s.replace("\"", "\\\"");
103+
}
99104
return "\"" + s + "\"";
100105
}
101106

102107
private String[] preprocessCharacters(Object src) {
103108
String[] processed = new String[Array.getLength(src)];
104109
for (int i = 0; i < processed.length; i++) {
105-
processed[i] = Array.get(src, i).toString();
110+
Object value = Array.get(src, i);
111+
processed[i] = value == null ? null : value.toString();
106112
}
107113
return preprocessStrings(processed);
108114
}

src/test/java/org/scijava/convert/ArrayToStringConverterTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,20 @@ public void testCyclicConversion() {
156156
Assert.assertArrayEquals(expected, actual);
157157
}
158158

159+
@Test
160+
public void testNullConversion() {
161+
String[] s1 = {null};
162+
String[] s2 = {"null"};
163+
String[] expected = new String[] {null};
164+
// Do the first conversion
165+
ArrayToStringConverter c1 = new ArrayToStringConverter();
166+
context.inject(c1);
167+
String converted = c1.convert(expected, String.class);
168+
// Try to convert back
169+
StringToArrayConverter c2 = new StringToArrayConverter();
170+
context.inject(c2);
171+
String[] actual = c2.convert(converted, String[].class);
172+
// NB: we cannot recreate the original {null} state
173+
Assert.assertNull(actual);
174+
}
159175
}

0 commit comments

Comments
 (0)