@@ -1497,28 +1497,42 @@ public static List<String> stringToPath(final String string) {
14971497 }
14981498
14991499 @ SuppressWarnings ("unchecked" )
1500- private static <T > T baseGet (final Map <String , Object > object , final String path ) {
1500+ private static <T > T baseGetAndSet (final Map <String , Object > object , final String path ,
1501+ final Optional <Object > value ) {
15011502 final List <String > paths = stringToPath (path );
15021503 int index = 0 ;
15031504 final int length = paths .size ();
15041505
15051506 Object localObject = object ;
1507+ Object savedLocalObject = null ;
1508+ String savedPath = null ;
15061509 while (localObject != null && index < length ) {
15071510 if (localObject instanceof Map ) {
15081511 Map .Entry mapEntry = getMapEntry ((Map ) localObject );
15091512 if (mapEntry != null && "#item" .equals (mapEntry .getKey ())) {
15101513 localObject = mapEntry .getValue ();
15111514 continue ;
15121515 }
1516+ savedLocalObject = localObject ;
1517+ savedPath = paths .get (index );
15131518 localObject = ((Map ) localObject ).get (paths .get (index ));
15141519 } else if (localObject instanceof List ) {
1520+ savedLocalObject = localObject ;
1521+ savedPath = paths .get (index );
15151522 localObject = ((List ) localObject ).get (Integer .parseInt (paths .get (index )));
15161523 } else {
15171524 break ;
15181525 }
15191526 index += 1 ;
15201527 }
15211528 if (index > 0 && index == length ) {
1529+ if (value .isPresent ()) {
1530+ if (savedLocalObject instanceof Map ) {
1531+ ((Map ) savedLocalObject ).put (savedPath , value .get ());
1532+ } else {
1533+ ((List ) savedLocalObject ).set (Integer .parseInt (savedPath ), value .get ());
1534+ }
1535+ }
15221536 return (T ) localObject ;
15231537 }
15241538 return null ;
@@ -1529,50 +1543,11 @@ private static Map.Entry getMapEntry(Map map) {
15291543 }
15301544
15311545 public static <T > T get (final Map <String , Object > object , final String path ) {
1532- return baseGet (object , path );
1533- }
1534-
1535- @ SuppressWarnings ("unchecked" )
1536- private static Map <String , Object > baseSet (final Map <String , Object > object ,
1537- final String path , final Object value ) {
1538- final List <String > paths = stringToPath (path );
1539- int index = 0 ;
1540- final int length = paths .size ();
1541-
1542- Object savedLocalObject = object ;
1543- String savedPath = paths .get (0 );
1544- Object localObject = object ;
1545- while (localObject != null && index < length ) {
1546- if (localObject instanceof Map ) {
1547- Map .Entry mapEntry = getMapEntry ((Map ) localObject );
1548- if (mapEntry != null && "#item" .equals (mapEntry .getKey ())) {
1549- localObject = mapEntry .getValue ();
1550- continue ;
1551- }
1552- savedLocalObject = localObject ;
1553- savedPath = paths .get (index );
1554- localObject = ((Map ) localObject ).get (paths .get (index ));
1555- } else if (localObject instanceof List ) {
1556- savedLocalObject = localObject ;
1557- savedPath = paths .get (index );
1558- localObject = ((List ) localObject ).get (Integer .parseInt (paths .get (index )));
1559- } else {
1560- break ;
1561- }
1562- index += 1 ;
1563- }
1564- if (index > 0 && index == length ) {
1565- if (savedLocalObject instanceof Map ) {
1566- ((Map ) savedLocalObject ).put (savedPath , value );
1567- } else {
1568- ((List ) savedLocalObject ).set (Integer .parseInt (savedPath ), value );
1569- }
1570- }
1571- return object ;
1546+ return baseGetAndSet (object , path , Optional .absent ());
15721547 }
15731548
1574- public static Map < String , Object > set (final Map <String , Object > object , final String path , Object value ) {
1575- return baseSet (object , path , value );
1549+ public static < T > T set (final Map <String , Object > object , final String path , Object value ) {
1550+ return baseGetAndSet (object , path , Optional . of ( value ) );
15761551 }
15771552
15781553 public static class FetchResponse {
0 commit comments