protected virtual bool CheckChildCanGenerate(EntityContext child,
                                                     EntityContext parent, bool onlyCheckCanGenerate)
        {
            Type            typeToFlush    = parent.Type;
            RequiredEntity  requiredParent = child.Description.Required.First(x => x.Type == typeToFlush);
            ISpreadStrategy spreadStrategy = _generatorSetup.GetSpreadStrategy(child.Description, requiredParent);

            //check if child can still use parent entities from temporary storage to generate
            bool canGenerateMore = spreadStrategy.CanGenerateFromParentNextReleaseCount(parent, child);

            if (onlyCheckCanGenerate)
            {
                return(canGenerateMore);
            }

            //check if child is not a flush candidate itself
            bool childIsFlushCandidate = _flushCandidates.Contains(child);

            return(!childIsFlushCandidate && canGenerateMore);
        }