static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        if (AssetPostprocessorUtility.ExitImportLoop(importedAssets, ASSET_PATH, ref s_importLoopCounter))
        {
            return;
        }

        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.Append("importedAssets {");
        foreach (var item in importedAssets)
        {
            stringBuilder.Append(item);
            stringBuilder.Append(", ");
        }
        stringBuilder.Append("}   ");

        stringBuilder.Append("deletedAssets {");
        foreach (var item in deletedAssets)
        {
            stringBuilder.Append(item);
            stringBuilder.Append(", ");
        }
        stringBuilder.Append("}   ");

        stringBuilder.Append("movedAssets {");
        foreach (var item in movedAssets)
        {
            stringBuilder.Append(item);
            stringBuilder.Append(", ");
        }
        stringBuilder.Append("}   ");

        stringBuilder.Append("movedFromAssetPaths {");
        foreach (var item in movedFromAssetPaths)
        {
            stringBuilder.Append(item);
            stringBuilder.Append(", ");
        }
        stringBuilder.Append("}   ");


        if (importedAssets.Contains("ProjectSettings/EditorBuildSettings.asset"))
        {
            UpdateMetaData(LogMode.ChangesOnly);
        }
    }
    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        if (AssetPostprocessorUtility.ExitImportLoop(importedAssets, ASSET_PATH, ref s_importLoopCounter))
        {
            return;
        }

        SimAssetBank bank      = null;
        bool         saveAsset = false;

        importedAssets.Where((assetPath) => assetPath.EndsWith(".prefab"))
        .Select((assetPath) => AssetDatabase.LoadAssetAtPath <GameObject>(assetPath))
        .Where((gameObject) => gameObject.GetComponent <SimAsset>() != null)
        .Select((gameObject) => gameObject.GetComponent <SimAsset>())
        .ToList()
        .ForEach((SimAsset prefab) =>
        {
            if (bank == null)
            {
                bank = AssetDatabaseX.LoadOrCreateScriptableObjectAsset <SimAssetBank>(ASSET_PATH);
            }

            saveAsset |= ValidateSimAssetIdForPrefab(prefab);

            if (!bank.EditorSimAssets.Contains(prefab))
            {
                saveAsset = true;
                bank.EditorSimAssets.Add(prefab);

                DebugEditor.LogAssetIntegrity($"Added {prefab.gameObject.name} to {nameof(SimAssetBank)}.");
            }
        });

        if (saveAsset)
        {
            EditorUtility.SetDirty(bank);
            AssetDatabase.SaveAssets();
        }
    }
    public void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        if (AssetPostprocessorUtility.ExitImportLoop(importedAssets, _bankAssetPath, ref _importLoopCounter))
        {
            return;
        }

        List <TStoredObject> modifiedItems = new List <TStoredObject>();

        importedAssets.Where((assetPath) => assetPath.EndsWith(_assetTypeFileExtension))
        .Select((assetPath) => AssetDatabase.LoadAssetAtPath <TAsset>(assetPath))
        .ToList().ForEach((assetObject) =>
        {
            if (_evaluateAssetDelegate(assetObject, out TStoredObject item))
            {
                modifiedItems.Add(item);
            }
        });

        if (modifiedItems.Count > 0)
        {
            UpdateBank(modifiedItems);
        }
    }