private List<Asset> discoverFurtherAssetsForChild(
      AssetContainer assetContainer,
      MemoizedFile dir,
      String requirePrefix,
      List<Asset> implicitDependencies,
      AssetRegistry assetDiscoveryInitiator,
      Asset parent) {
    List<Asset> furtherAssetImplicitDependencies = new ArrayList<>();
    furtherAssetImplicitDependencies.addAll(implicitDependencies);
    furtherAssetImplicitDependencies.add(parent);

    List<Asset> discoveredAssets =
        assetDiscoveryInitiator.discoverFurtherAssets(
            dir, requirePrefix, furtherAssetImplicitDependencies);
    List<Asset> dependentAssets = new ArrayList<>();
    if (parent instanceof LinkedAsset) {
      for (Asset dependentAsset : discoveredAssets) {
        if (dependentAsset instanceof SourceModule) {
          continue;
        }
        dependentAssets.add(dependentAsset);
      }
      ((LinkedAsset) parent).addImplicitDependencies(dependentAssets);
    }

    for (MemoizedFile childDir : dir.dirs()) {
      discoveredAssets.addAll(
          createAssetsForChildDir(
              assetContainer,
              childDir,
              requirePrefix,
              implicitDependencies,
              assetDiscoveryInitiator,
              parent));
    }
    return discoveredAssets;
  }