internal void GatherAllAssetReferenceDrawableEntries(List <IReferenceEntryData> refEntries, AddressableAssetSettings settings)
        {
            var path = AssetPath;

            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            if (guid == EditorSceneListName)
            {
                //We don't add Built in scenes to the list of assignable AssetReferences so no need to check this.
                return;
            }
            if (guid == ResourcesName)
            {
                //We don't add Resources assets to the list of assignable AssetReferences so no need to check this.
                return;
            }
            if (AssetDatabase.IsValidFolder(path))
            {
                foreach (var fi in AddressablesFileEnumeration.EnumerateAddressableFolder(path, settings, true))
                {
                    string relativeAddress = address + GetRelativePath(fi, path);
                    var    reference       = new ImplicitAssetEntry()
                    {
                        address       = relativeAddress,
                        AssetPath     = fi,
                        IsInResources = IsInResources,
                        labels        = new HashSet <string>(m_Labels)
                    };

                    refEntries.Add(reference);
                }
            }
#pragma warning disable 0618
            else if (MainAssetType == typeof_AddressableAssetEntryCollection)
            {
                var col = AssetDatabase.LoadAssetAtPath <AddressableAssetEntryCollection>(AssetPath);
                if (col != null)
                {
                    foreach (var e in col.Entries)
                    {
                        refEntries.Add(new ImplicitAssetEntry()
                        {
                            address       = e.address,
                            AssetPath     = e.AssetPath,
                            IsInResources = e.IsInResources,
                            labels        = new HashSet <string>(e.labels.Union(this.labels))
                        });
                    }
                }
            }
#pragma warning restore 0618
            else
            {
                refEntries.Add(this);
            }
        }
#pragma warning restore 0618

        internal void GatherFolderEntries(List <AddressableAssetEntry> assets, bool recurseAll, bool includeSubObjects, Func <AddressableAssetEntry, bool> entryFilter)
        {
            var path     = AssetPath;
            var settings = parentGroup.Settings;

            foreach (var file in AddressablesFileEnumeration.EnumerateAddressableFolder(path, settings, recurseAll))
            {
                var subGuid = AssetDatabase.AssetPathToGUID(file);
                var entry   = settings.CreateSubEntryIfUnique(subGuid, address + GetRelativePath(file, path), this);

                if (entry != null)
                {
                    entry.IsInResources =
                        IsInResources; //if this is a sub-folder of Resources, copy it on down
                    entry.m_Labels = m_Labels;
                    if (entryFilter == null || entryFilter(entry))
                    {
                        assets.Add(entry);
                    }

                    if (includeSubObjects)
                    {
                        var mainType = AssetDatabase.GetMainAssetTypeAtPath(entry.AssetPath);
                        if (mainType == typeof(SpriteAtlas))
                        {
                            entry.GatherSpriteAtlasEntries(assets);
                        }
                        else
                        {
                            entry.GatherSubObjectEntries(assets);
                        }
                    }
                }
            }

            if (!recurseAll)
            {
                foreach (var fo in Directory.EnumerateDirectories(path, "*.*", SearchOption.TopDirectoryOnly))
                {
                    var folder = fo.Replace('\\', '/');
                    if (AssetDatabase.IsValidFolder(folder))
                    {
                        var entry = settings.CreateSubEntryIfUnique(AssetDatabase.AssetPathToGUID(folder), address + GetRelativePath(folder, path), this);
                        if (entry != null)
                        {
                            entry.IsInResources = IsInResources; //if this is a sub-folder of Resources, copy it on down
                            entry.m_Labels      = m_Labels;
                            entry.IsFolder      = true;
                            if (entryFilter == null || entryFilter(entry))
                            {
                                assets.Add(entry);
                            }
                        }
                    }
                }
            }
        }