Example #1
0
        internal override bool MatchesFilter(FilterItem newFilter)
        {
            var filters = new[] { newFilter };

            switch (newFilter.kind)
            {
            case FilterKind.Path:
            case FilterKind.Directory:
            case FilterKind.FileName:
            case FilterKind.Extension:
                return(!string.IsNullOrEmpty(Path) && CSFilterTools.IsValueMatchesAnyFilterOfKind(Path, filters, newFilter.kind));

            case FilterKind.Type:
            {
                return(!string.IsNullOrEmpty(componentName) && CSFilterTools.IsValueMatchesAnyFilterOfKind(componentName, filters, newFilter.kind));
            }

            case FilterKind.NotSet:
                return(false);

            default:
                Debug.LogWarning(Maintainer.LogPrefix + "Unknown filter kind: " + newFilter.kind);
                return(false);
            }
        }
Example #2
0
 private static void MigrateFromPre_1_4_1_0(ProjectSettings settings)
 {
     if (!CSFilterTools.IsValueMatchesAnyFilterOfKind("dummy.asmdef",
                                                      settings.projectCleanerSettings.pathIgnoresFilters, FilterKind.Extension))
     {
         ArrayUtility.Add(ref settings.projectCleanerSettings.pathIgnoresFilters,
                          FilterItem.Create(".asmdef", FilterKind.Extension));
     }
 }
Example #3
0
        private void DrawMoreButton(AssetRecord assetRecord)
        {
            if (UIHelpers.RecordButton(assetRecord, "Shows menu with additional actions for this record.", CSIcons.More))
            {
                var menu = new GenericMenu();
                if (!string.IsNullOrEmpty(assetRecord.path))
                {
                    menu.AddItem(new GUIContent("Ignore/Full Path"), false, () =>
                    {
                        if (!CSFilterTools.IsValueMatchesAnyFilter(assetRecord.assetDatabasePath, MaintainerSettings.Cleaner.pathIgnoresFilters))
                        {
                            var newFilter = FilterItem.Create(assetRecord.assetDatabasePath, FilterKind.Path);
                            ArrayUtility.Add(ref MaintainerSettings.Cleaner.pathIgnoresFilters, newFilter);

                            MaintainerWindow.ShowNotification("Ignore added: " + assetRecord.assetDatabasePath);
                            CleanerFiltersWindow.Refresh();

                            if (MaintainerSettings.Cleaner.rescanAfterContextIgnore)
                            {
                                StartSearch();
                            }
                        }
                        else
                        {
                            MaintainerWindow.ShowNotification("Already added to the ignores!");
                        }
                    });

                    var dir = Directory.GetParent(assetRecord.assetDatabasePath);
                    if (!CSPathTools.IsAssetsRootPath(dir.FullName))
                    {
                        menu.AddItem(new GUIContent("Ignore/Parent Folder"), false, () =>
                        {
                            var dirPath = CSPathTools.EnforceSlashes(dir.ToString());

                            if (!CSFilterTools.IsValueMatchesAnyFilter(dirPath, MaintainerSettings.Cleaner.pathIgnoresFilters))
                            {
                                var newFilter = FilterItem.Create(dirPath, FilterKind.Directory);
                                ArrayUtility.Add(ref MaintainerSettings.Cleaner.pathIgnoresFilters, newFilter);

                                MaintainerWindow.ShowNotification("Ignore added: " + dirPath);
                                CleanerFiltersWindow.Refresh();

                                if (MaintainerSettings.Cleaner.rescanAfterContextIgnore)
                                {
                                    StartSearch();
                                }
                            }
                            else
                            {
                                MaintainerWindow.ShowNotification("Already added to the ignores!");
                            }
                        });
                    }

                    var extension = Path.GetExtension(assetRecord.path);
                    if (!string.IsNullOrEmpty(extension))
                    {
                        menu.AddItem(new GUIContent("Ignore/\"" + extension + "\" Extension"), false, () =>
                        {
                            if (!CSFilterTools.IsValueMatchesAnyFilterOfKind(extension, MaintainerSettings.Cleaner.pathIgnoresFilters, FilterKind.Extension))
                            {
                                var newFilter = FilterItem.Create(extension, FilterKind.Extension, true);
                                ArrayUtility.Add(ref MaintainerSettings.Cleaner.pathIgnoresFilters, newFilter);

                                MaintainerWindow.ShowNotification("Ignore added: " + extension);
                                CleanerFiltersWindow.Refresh();

                                if (MaintainerSettings.Cleaner.rescanAfterContextIgnore)
                                {
                                    StartSearch();
                                }
                            }
                            else
                            {
                                MaintainerWindow.ShowNotification("Already added to the ignores!");
                            }
                        });
                    }
                }
                menu.ShowAsContext();
            }
        }
Example #4
0
        private static void MigrateFromPre_1_5_1(ProjectSettings settings)
        {
            if (settings.projectCleanerSettings.pathIgnoresFilters != null &&
                settings.projectCleanerSettings.pathIgnoresFilters.Length > 0)
            {
                var defaultFilters   = ProjectCleanerSettings.GetDefaultFilters();
                var mandatoryFilters = settings.projectCleanerSettings.MandatoryFilters;

                var modificationsLog = new StringBuilder();

                for (var i = settings.projectCleanerSettings.pathIgnoresFilters.Length - 1; i >= 0; i--)
                {
                    var pathIgnoresFilter = settings.projectCleanerSettings.pathIgnoresFilters[i];
                    if (pathIgnoresFilter.ignoreCase)
                    {
                        continue;
                    }

                    var isMandatory = false;

                    if (CSFilterTools.IsValueMatchesAnyFilterOfKind(pathIgnoresFilter.value, mandatoryFilters,
                                                                    pathIgnoresFilter.kind))
                    {
                        isMandatory = true;
                    }
                    else
                    {
                        switch (pathIgnoresFilter.kind)
                        {
                        case FilterKind.Extension:
                            var extension = pathIgnoresFilter.value.ToLowerInvariant();
                            if (extension == ".dll" ||
                                extension == ".asmdef" ||
                                extension == ".mdb" ||
                                extension == ".xml" ||
                                extension == ".rsp")
                            {
                                isMandatory = true;
                            }

                            break;

                        case FilterKind.FileName:
                            var value = pathIgnoresFilter.value.ToLowerInvariant();
                            if (value == "readme" ||
                                value == "manual")
                            {
                                isMandatory = true;
                            }

                            break;
                        }
                    }

                    if (isMandatory)
                    {
                        modificationsLog.Append("Removing Project Cleaner filter '")
                        .Append(pathIgnoresFilter.value)
                        .AppendLine("': built-in mandatory filter covers it now.");
                        ArrayUtility.RemoveAt(ref settings.projectCleanerSettings.pathIgnoresFilters, i);
                        continue;
                    }

                    if (CSFilterTools.IsValueMatchesAnyFilterOfKind(pathIgnoresFilter.value, defaultFilters,
                                                                    pathIgnoresFilter.kind))
                    {
                        modificationsLog.Append("Changing default Project Cleaner filter '")
                        .Append(pathIgnoresFilter.value)
                        .AppendLine("': ignore case setting to 'true' for better accuracy.");
                        pathIgnoresFilter.ignoreCase = true;
                    }
                }

                if (modificationsLog.Length > 0)
                {
                    modificationsLog.Insert(0, "Maintainer settings updated, read below for details\n");
                    Debug.Log(Maintainer.LogPrefix + modificationsLog);
                }
            }
        }
Example #5
0
        /////////////////////////////////////////////////////////////////////////
        // Game Object's Components Processing
        /////////////////////////////////////////////////////////////////////////

        public static void ProcessComponent(Component component, int orderIndex)
        {
#if !UNITY_2019_1_OR_NEWER
            if (missingComponentDetector.CheckAndRecordNullComponent(component))
            {
                return;
            }
#else
            if (component == null)
            {
                return;
            }
#endif

            if ((component.hideFlags & HideFlags.HideInInspector) != 0)
            {
                return;
            }

            if (!MaintainerSettings.Issues.touchDisabledComponents)
            {
                if (EditorUtility.GetObjectEnabled(component) == 0)
                {
                    return;
                }
            }

            var componentType = component.GetType();
            var componentName = componentType.Name;

            if (MaintainerSettings.Issues.componentIgnoresFilters != null &&
                MaintainerSettings.Issues.componentIgnoresFilters.Length > 0)
            {
                if (CSFilterTools.IsValueMatchesAnyFilterOfKind(componentName, MaintainerSettings.Issues.componentIgnoresFilters, FilterKind.Type))
                {
                    return;
                }
            }

            duplicateComponentDetector.ProcessComponent(component, componentType);

            var shouldCheckPropertiesForDuplicate = duplicateComponentDetector.IsPropertiesHashCalculationRequired();
            if (shouldCheckPropertiesForDuplicate)
            {
                // skipping duplicate search for non-standard components with invisible properties
                var baseType = componentType.BaseType;
                if (baseType != null)
                {
                    if (baseType.Name == "MegaModifier")
                    {
                        shouldCheckPropertiesForDuplicate = false;
                        duplicateComponentDetector.SkipComponent();
                    }
                }
            }

            var shouldTraverseProperties = missingReferenceDetector.Enabled || shouldCheckPropertiesForDuplicate;
            if (shouldTraverseProperties)
            {
                var initialInfo = new SerializedObjectTraverseInfo(component);

                CSTraverseTools.TraverseObjectProperties(initialInfo, (info, property) =>
                {
                    if (property.type == "UnityEvent")
                    {
                        missingReferenceDetector.TryDetectUnityEventIssues(currentLocation, currentAsset.Path,
                                                                           currentGameObject, componentType, componentName, orderIndex, property);

                        info.skipCurrentTree = true;
                        return;
                    }

                    missingReferenceDetector.TryDetectIssue(currentLocation, currentAsset.Path, currentGameObject, componentType, componentName, orderIndex, property);

                    if (shouldCheckPropertiesForDuplicate)
                    {
                        duplicateComponentDetector.ProcessProperty(property);
                    }
                });
            }

            if (shouldCheckPropertiesForDuplicate)
            {
                duplicateComponentDetector.TryDetectIssue(currentLocation, currentAsset.Path, currentGameObject, componentType, componentName, orderIndex);
            }

            if (component is Terrain)
            {
                inconsistentTerrainDataDetector.ProcessTerrainComponent((Terrain)component, componentType, componentName, orderIndex);
            }
            else if (component is TerrainCollider)
            {
                inconsistentTerrainDataDetector.ProcessTerrainColliderComponent((TerrainCollider)component);
            }
            //Debug.Log("ProcessComponent: " + target.name + ":" + component);
        }
Example #6
0
        private static MaintainerSettings LoadOrCreate()
        {
            MaintainerSettings settings;

            if (!File.Exists(Path))
            {
                settings = CreateNewSettingsFile();
            }
            else
            {
                settings = LoadInstance();

                if (settings == null)
                {
                    CSFileTools.DeleteFile(Path);
                    settings = CreateNewSettingsFile();
                }

                if (settings.version != Maintainer.Version)
                {
                    if (string.IsNullOrEmpty(settings.version))
                    {
                        MigrateAllIgnores(settings.issuesFinderSettings.pathIgnores, ref settings.issuesFinderSettings.pathIgnoresFilters, FilterKind.Path);
                        settings.issuesFinderSettings.pathIgnores = null;

                        MigrateAllIgnores(settings.issuesFinderSettings.componentIgnores, ref settings.issuesFinderSettings.componentIgnoresFilters, FilterKind.Type);
                        settings.issuesFinderSettings.componentIgnores = null;

                        MigrateAllIgnores(settings.issuesFinderSettings.pathIncludes, ref settings.issuesFinderSettings.pathIncludesFilters, FilterKind.Path);
                        settings.issuesFinderSettings.pathIncludes = null;

                        MigrateAllIgnores(settings.issuesFinderSettings.sceneIncludes, ref settings.issuesFinderSettings.sceneIncludesFilters, FilterKind.Path);
                        settings.issuesFinderSettings.sceneIncludes = null;

                        MigrateAllIgnores(settings.projectCleanerSettings.pathIgnores, ref settings.projectCleanerSettings.pathIgnoresFilters, FilterKind.Path);
                        settings.projectCleanerSettings.pathIgnores = null;

                        MigrateAllIgnores(settings.projectCleanerSettings.sceneIgnores, ref settings.projectCleanerSettings.sceneIgnoresFilters, FilterKind.Path);
                        settings.projectCleanerSettings.sceneIgnores = null;

                        settings.projectCleanerSettings.AddDefaultFilters();
                    }

                    if (new Version(settings.version) < new Version("1.4.1.0"))
                    {
                        if (!CSFilterTools.IsValueMatchesAnyFilterOfKind("dummy.asmdef", settings.projectCleanerSettings.pathIgnoresFilters, FilterKind.Extension))
                        {
                            ArrayUtility.Add(ref settings.projectCleanerSettings.pathIgnoresFilters, FilterItem.Create(".asmdef", FilterKind.Extension));
                        }
                    }

                    if (new Version(settings.version) < new Version("1.5.1"))
                    {
                        if (settings.projectCleanerSettings.pathIgnoresFilters != null &&
                            settings.projectCleanerSettings.pathIgnoresFilters.Length > 0)
                        {
                            var defaultFilters   = settings.projectCleanerSettings.GetDefaultFilters();
                            var mandatoryFilters = settings.projectCleanerSettings.MandatoryFilters;

                            var modificationsLog = new StringBuilder();

                            for (var i = settings.projectCleanerSettings.pathIgnoresFilters.Length - 1; i >= 0; i--)
                            {
                                var pathIgnoresFilter = settings.projectCleanerSettings.pathIgnoresFilters[i];
                                if (pathIgnoresFilter.ignoreCase)
                                {
                                    continue;
                                }

                                var isMandatory = false;

                                if (CSFilterTools.IsValueMatchesAnyFilterOfKind(pathIgnoresFilter.value, mandatoryFilters, pathIgnoresFilter.kind))
                                {
                                    isMandatory = true;
                                }
                                else
                                {
                                    switch (pathIgnoresFilter.kind)
                                    {
                                    case FilterKind.Extension:
                                        var extension = pathIgnoresFilter.value.ToLowerInvariant();
                                        if (extension == ".dll" ||
                                            extension == ".asmdef" ||
                                            extension == ".mdb" ||
                                            extension == ".xml" ||
                                            extension == ".rsp")
                                        {
                                            isMandatory = true;
                                        }
                                        break;

                                    case FilterKind.FileName:
                                        var value = pathIgnoresFilter.value.ToLowerInvariant();
                                        if (value == "readme" ||
                                            value == "manual")
                                        {
                                            isMandatory = true;
                                        }
                                        break;
                                    }
                                }

                                if (isMandatory)
                                {
                                    modificationsLog.Append("Removing Project Cleaner filter '")
                                    .Append(pathIgnoresFilter.value)
                                    .AppendLine("': built-in mandatory filter covers it now.");
                                    ArrayUtility.RemoveAt(ref settings.projectCleanerSettings.pathIgnoresFilters, i);
                                    continue;
                                }

                                if (CSFilterTools.IsValueMatchesAnyFilterOfKind(pathIgnoresFilter.value, defaultFilters, pathIgnoresFilter.kind))
                                {
                                    modificationsLog.Append("Changing default Project Cleaner filter '")
                                    .Append(pathIgnoresFilter.value)
                                    .AppendLine("': ignore case setting to 'true' for better accuracy.");
                                    pathIgnoresFilter.ignoreCase = true;
                                }
                            }

                            if (modificationsLog.Length > 0)
                            {
                                modificationsLog.Insert(0, "Maintainer settings updated, read below for details\n");
                                Debug.Log(Maintainer.LogPrefix + modificationsLog);
                            }
                        }
                    }

                    SearchResultsStorage.Clear();
                    //AssetsMap.Delete();
                }
            }

            settings.hideFlags = HideFlags.HideAndDontSave;
            settings.version   = Maintainer.Version;

            return(settings);
        }