Skip to content

Commit 2322f53

Browse files
committed
Fix formatObject method to handle null values
1 parent 30e11ca commit 2322f53

2 files changed

Lines changed: 64 additions & 2 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.smartdevicelink.test.rpc;
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
4+
5+
import com.smartdevicelink.proxy.RPCStruct;
6+
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
import static junit.framework.TestCase.assertNotNull;
14+
15+
@RunWith(AndroidJUnit4.class)
16+
public class RPCStructTests {
17+
18+
@Test
19+
public void testFormatObject() {
20+
final String KEY = "LIST";
21+
RPCStruct struct = new RPCStruct();
22+
List<RPCStruct> structs = new ArrayList<>();
23+
struct.setValue(KEY, structs);
24+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
25+
26+
structs.add(new RPCStruct());
27+
struct.setValue(KEY, structs);
28+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
29+
30+
structs.clear();
31+
structs.add(null);
32+
struct.setValue(KEY, structs);
33+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
34+
35+
structs.clear();
36+
structs.add(null);
37+
structs.add(new RPCStruct());
38+
struct.setValue(KEY, structs);
39+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
40+
41+
structs.clear();
42+
structs.add(new RPCStruct());
43+
structs.add(null);
44+
structs.add(new RPCStruct());
45+
struct.setValue(KEY, structs);
46+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
47+
}
48+
}

base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,18 @@ protected Object formatObject(Class tClass, Object obj){
275275
} else if (obj instanceof List<?>) {
276276
List<?> list = (List<?>) obj;
277277
if (list != null && list.size() > 0) {
278-
Object item = list.get(0);
279-
if (tClass.isInstance(item)) {
278+
Object item = null;
279+
//Iterate through list to find first non-null object
280+
for(Object object: list){
281+
if(object != null) {
282+
item = object;
283+
break;
284+
}
285+
}
286+
287+
if (item == null) {
288+
return list;
289+
} else if (tClass.isInstance(item)) {
280290
return list;
281291
} else if (item instanceof Hashtable) {
282292
List<Object> newList = new ArrayList<Object>();
@@ -307,6 +317,10 @@ protected Object formatObject(Class tClass, Object obj){
307317
}
308318
return newList;
309319
}
320+
} else {
321+
//If the list is either null or empty it should be returned. It will keep the same
322+
//behavior as it does today with null lists, but empty ones will now also be returned.
323+
return list;
310324
}
311325
}
312326
return null;

0 commit comments

Comments
 (0)