private function resolveReferredFixture(FixtureIdInterface $referredFixture, string $referredFixtureId, ResolvedFixtureSet $fixtureSet, GenerationContext $context) : ResolvedValueWithFixtureSet
{
if ($fixtureSet->getObjects()->has($referredFixture)) {
$referredObject = $fixtureSet->getObjects()->get($referredFixture);
if ($referredObject instanceof CompleteObject || false === $context->needsCompleteGeneration()) {
return new ResolvedValueWithFixtureSet($referredObject->getInstance(), $fixtureSet);
}
}
// Object is either not completely generated or has not been generated at all yet
if (false === $referredFixture instanceof FixtureInterface) {
throw FixtureNotFoundExceptionFactory::create($referredFixtureId);
}
$context->markIsResolvingFixture($referredFixtureId);
$objects = $this->generator->generate($referredFixture, $fixtureSet, $context);
$fixtureSet = $fixtureSet->withObjects($objects);
return new ResolvedValueWithFixtureSet($fixtureSet->getObjects()->get($referredFixture)->getInstance(), $fixtureSet);
}