@@ -297,6 +297,7 @@ static boolean removeUnsupportedDataTypes(@NonNull Map<String, Object> data, @No
297297 assert data != null ;
298298
299299 StringBuilder removedKeys = new StringBuilder ();
300+ Map <String , Object > gonnaReplace = new ConcurrentHashMap <>();
300301
301302 for (Iterator <Map .Entry <String , Object >> it = data .entrySet ().iterator (); it .hasNext (); ) {
302303 Map .Entry <String , Object > entry = it .next ();
@@ -307,9 +308,37 @@ static boolean removeUnsupportedDataTypes(@NonNull Map<String, Object> data, @No
307308 //found unsupported data type or null key or value, removing
308309 it .remove ();
309310 removedKeys .append ("key:[" ).append (key ).append ("] value:[" ).append (value ).append ("] type:[" ).append (value == null ? "null" : value .getClass ().getSimpleName ()).append ("] ," );
311+ } else if (value instanceof List ) {
312+ List <?> list = (List <?>) value ;
313+ list = new ArrayList <>(list );
314+ int a = list .size ();
315+ for (int i = 0 ; i < a ; i ++) {
316+ Object element = list .get (i );
317+ if (!isSupportedDataTypeBasic (element )) {
318+ removedKeys .append ("from_list" ).append (list ).append ("index:[" ).append (i ).append ("] value:[" ).append (element ).append ("] type:[" ).append (element == null ? "null" : element .getClass ().getSimpleName ()).append ("] ," );
319+ list .remove (i );
320+ i --;
321+ a --;
322+ }
323+ }
324+ gonnaReplace .put (key , list );
325+ } else if (value instanceof JSONArray ) {
326+ JSONArray jsonArray = (JSONArray ) value ;
327+ int a = jsonArray .length ();
328+ for (int i = 0 ; i < a ; i ++) {
329+ Object element = jsonArray .opt (i );
330+ if (!isSupportedDataTypeBasic (element )) {
331+ removedKeys .append ("from_list" ).append (jsonArray ).append ("index:[" ).append (i ).append ("] value:[" ).append (element ).append ("] type:[" ).append (element == null ? "null" : element .getClass ().getSimpleName ()).append ("] ," );
332+ jsonArray .remove (i );
333+ i --;
334+ a --;
335+ }
336+ }
337+ gonnaReplace .put (key , jsonArray );
310338 }
311339 }
312340 String removedKeysStr = removedKeys .toString ();
341+ data .putAll (gonnaReplace );
313342
314343 if (!removedKeysStr .isEmpty ()) {
315344 L .w ("[UtilsInternalLimits] removeUnsupportedDataTypes, removed " + removedKeysStr + " from the provided data map." );
@@ -359,34 +388,20 @@ private static boolean isSupportedDataTypeBasic(@Nullable Object value) {
359388 * - User profile custom properties
360389 * - User profile custom properties modifiers
361390 * - Feedback widgets' results
391+ * This function also removes unsupported data types inside the collections
362392 *
363393 * @param value to check
364394 * @return true if the value is a supported data type
365395 */
366396 static boolean isSupportedDataType (@ Nullable Object value ) {
367397 if (isSupportedDataTypeBasic (value )) {
368398 return true ;
369- } else if (value instanceof List ) {
370- List <?> list = (List <?>) value ;
371- for (Object element : list ) {
372- if (!isSupportedDataTypeBasic (element )) {
373- return false ;
374- }
375- }
399+ } else if (value instanceof List || value instanceof JSONArray ) {
376400 return true ;
377401 } else if (value != null && value .getClass ().isArray ()) {
378402 Class <?> componentType = value .getClass ().getComponentType ();
379403 return componentType == String .class || componentType == Integer .class || componentType == Double .class || componentType == Boolean .class || componentType == Float .class || componentType == Long .class
380404 || componentType == int .class || componentType == double .class || componentType == boolean .class || componentType == float .class || componentType == long .class ;
381- } else if (value instanceof JSONArray ) {
382- JSONArray jsonArray = (JSONArray ) value ;
383- for (int i = 0 ; i < jsonArray .length (); i ++) {
384- Object element = jsonArray .opt (i );
385- if (!isSupportedDataTypeBasic (element )) {
386- return false ;
387- }
388- }
389- return true ;
390405 }
391406 return false ;
392407 }
0 commit comments