protected void patchUnresolvedReferences ( ) { Iterator i = unresolvedRefs . iterator ( ) ; while ( i . hasNext ( ) ) { UnresolvedReference ref = ( UnresolvedReference ) i . next ( ) ; Object objToFix = ref . referencingObj . target ; JsonObject objReferenced = reader . getObjectsRead ( ) . get ( ref . refId ) ; if ( ref . index >= 0 ) { // Fix []'s and Collections containing a forward reference. if ( objToFix instanceof List ) { // Patch up Indexable Collections List list = ( List ) objToFix ; list . set ( ref . index , objReferenced . target ) ; } else if ( objToFix instanceof Collection ) { // Add element (since it was not indexable, add it to collection) Collection col = ( Collection ) objToFix ; col . add ( objReferenced . target ) ; } else { Array . set ( objToFix , ref . index , objReferenced . target ) ; // patch array element here } } else { // Fix field forward reference Field field = MetaUtils . getField ( objToFix . getClass ( ) , ref . field ) ; if ( field != null ) { try { field . set ( objToFix , objReferenced . target ) ; // patch field here } catch ( Exception e ) { throw new JsonIoException ( "Error setting field while resolving references '" + field . getName ( ) + "', @ref = " + ref . refId , e ) ; } } } i . remove ( ) ; } }
For all fields where the value was