private static void traverseReferencesOutsideClosure(HollowReadStateEngine stateEngine, HollowCollectionTypeReadState referencerTypeState, String referencedType, Map<String, BitSet> closureMatches, TransitiveSetTraverserAction action) {
HollowCollectionSchema schema = referencerTypeState.getSchema();
if(!referencedType.equals(schema.getElementType()))
return;
BitSet referencedClosureMatches = getOrCreateBitSet(closureMatches, referencedType, stateEngine.getTypeState(referencedType).maxOrdinal());
BitSet referencerClosureMatches = getOrCreateBitSet(closureMatches, schema.getName(), referencerTypeState.maxOrdinal());
BitSet allReferencerOrdinals = getPopulatedOrdinals(referencerTypeState);
int ordinal = allReferencerOrdinals.nextSetBit(0);
while(ordinal != -1) {
if(!referencerClosureMatches.get(ordinal)) {
HollowOrdinalIterator iter = referencerTypeState.ordinalIterator(ordinal);
int refOrdinal = iter.next();
while(refOrdinal != HollowOrdinalIterator.NO_MORE_ORDINALS) {
if(referencedClosureMatches.get(refOrdinal)) {
action.foundReference(referencerClosureMatches, ordinal, referencedClosureMatches, refOrdinal);
}
refOrdinal = iter.next();
}
}
ordinal = allReferencerOrdinals.nextSetBit(ordinal + 1);
}
}