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; }