You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2019/04/12 15:45:04 UTC
svn commit: r1857407 - in /felix/trunk/converter/converter/src:
main/java/org/osgi/util/converter/ConvertingImpl.java
test/java/org/osgi/util/converter/ConverterTest.java
Author: davidb
Date: Fri Apr 12 15:45:04 2019
New Revision: 1857407
URL: http://svn.apache.org/viewvc?rev=1857407&view=rev
Log:
FELIX-6100 [converter] Ensure that converting null to an array creates an object of the correct type
Patch applied on behalf of Tim Ward with many thanks.
This closes #197
Modified:
felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java?rev=1857407&r1=1857406&r2=1857407&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java Fri Apr 12 15:45:04 2019
@@ -825,7 +825,18 @@ class ConvertingImpl extends AbstractSpe
Class< ? > boxed = Util.primitiveToBoxed(cls);
if (boxed.equals(cls)) {
if (cls.isArray()) {
- return new Object[] {};
+ int i = 1;
+ Class<?> componentType = cls.getComponentType();
+ while(componentType.isArray()) {
+ i++;
+ componentType = cls.getComponentType();
+ }
+
+ if(i == 1) {
+ return Array.newInstance(componentType, 0);
+ } else {
+ return Array.newInstance(componentType, new int[i]);
+ }
} else if (Collection.class.isAssignableFrom(cls)) {
return c.convert(Collections.emptyList()).to(cls);
}
Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java?rev=1857407&r1=1857406&r2=1857407&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java Fri Apr 12 15:45:04 2019
@@ -23,6 +23,7 @@ import org.osgi.framework.Version;
import org.osgi.util.converter.MyDTO.Count;
import org.osgi.util.converter.MyEmbeddedDTO.Alpha;
+import java.lang.reflect.Array;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -342,6 +343,31 @@ public class ConverterTest {
assertArrayEquals(new char [] {'x', 'y'}, ca4b);
assertNotSame("Should have created a new instance", ca4a, ca4b);
}
+
+ /**
+ * 707.4.3.1 - null becomes an empty array
+ */
+ @Test
+ public void testNullToArrayConversion() {
+
+ checkArray(String[].class);
+ checkArray(boolean[].class);
+ checkArray(byte[].class);
+ checkArray(short[].class);
+ checkArray(char[].class);
+ checkArray(int[].class);
+ checkArray(float[].class);
+ checkArray(long[].class);
+ checkArray(double[].class);
+ }
+
+ private void checkArray(Class<?> arrayType) {
+ assertTrue(arrayType.isArray());
+
+ Object array = converter.convert(null).to(arrayType);
+ assertEquals(0, Array.getLength(array));
+ assertTrue(arrayType.isInstance(array));
+ }
@Test
public void testLongCollectionConversion() {