public void TryDetectIssuesInSettingsAsset(AssetInfo asset, AssetSettingsKind kind)
        {
            if (!enabled)
            {
                return;
            }

            var newIssues = SettingsChecker.CheckSettingsAssetForMissingReferences(asset, kind);

            if (newIssues.Count > 0)
            {
                issues.AddRange(newIssues);
            }
        }
Пример #2
0
        internal static string[] FindDependencies(AssetSettingsKind settingsKind, Type type, AssetKind kind, string path)
        {
            var dependenciesGUIDs = new HashSet <string>();

            if (settingsKind == AssetSettingsKind.NotSettings)
            {
                /* pre-regular dependenciesGUIDs additions */
                FillDependencies(InternalDependenciesParsers, ref dependenciesGUIDs, kind, type, path);

                /* regular dependenciesGUIDs additions */
                var dependencies = AssetDatabase.GetDependencies(path, false);
                var guids        = CSAssetTools.GetAssetsGUIDs(dependencies);
                if (guids != null && guids.Length > 0)
                {
                    dependenciesGUIDs.UnionWith(guids);
                }
            }
            else
            {
                FillSettingsAssetDependencies(ref dependenciesGUIDs, path, settingsKind);
            }

            if (externalDependenciesParsers != null && externalDependenciesParsers.Count > 0)
            {
                FillDependencies(externalDependenciesParsers, ref dependenciesGUIDs, kind, type, path);
            }

            // kept for debugging purposes

            /*if (Path.Contains("1.unity"))
             * {
             *      Debug.Log("1.unity non-recursive dependenciesGUIDs:");
             *      foreach (var reference in references)
             *      {
             *              Debug.Log(reference);
             *      }
             * }*/

            return(dependenciesGUIDs.ToArray());
        }
Пример #3
0
        public static AssetInfo Create(RawAssetInfo rawAssetInfo, Type type, AssetSettingsKind settingsKind)
        {
            if (string.IsNullOrEmpty(rawAssetInfo.guid))
            {
                Debug.LogError("Can't create AssetInfo since guid is invalid!");
                return(null);
            }

            var newAsset = new AssetInfo
            {
                GUID         = rawAssetInfo.guid,
                Path         = rawAssetInfo.path,
                Kind         = rawAssetInfo.kind,
                Type         = type,
                SettingsKind = settingsKind,
                fileInfo     = new FileInfo(rawAssetInfo.path),
                metaFileInfo = new FileInfo(rawAssetInfo.path + ".meta")
            };

            newAsset.UpdateIfNeeded();

            return(newAsset);
        }
Пример #4
0
        public static List <IssueRecord> CheckSettingsAssetForMissingReferences(AssetInfo asset, AssetSettingsKind kind)
        {
            var result = new List <IssueRecord>();

            // include only supported settings files with object references

            if (kind != AssetSettingsKind.EditorSettings &&
                kind != AssetSettingsKind.GraphicsSettings &&
                kind != AssetSettingsKind.DynamicsManager &&
                kind != AssetSettingsKind.Physics2DSettings &&
                kind != AssetSettingsKind.PresetManager &&
                kind != AssetSettingsKind.VFXManager)
            {
                return(result);
            }

            var allAssets = AssetDatabase.LoadAllAssetsAtPath(asset.Path);

            if (allAssets == null || allAssets.Length <= 0)
            {
                return(result);
            }

            foreach (var assetObject in allAssets)
            {
                if (assetObject == null)
                {
                    return(result);
                }

                var traverseInfo = new SerializedObjectTraverseInfo(assetObject);

                CSTraverseTools.TraverseObjectProperties(traverseInfo, (info, property) =>
                {
                    if (MissingReferenceDetector.IsPropertyHasMissingReference(property))
                    {
                        var issue = SettingsIssueRecord.Create(kind, IssueKind.MissingReference, asset.Path,
                                                               property.propertyPath);
                        result.Add(issue);
                    }
                });
            }

            return(result);
        }
Пример #5
0
        public static bool RevealInSettings(AssetSettingsKind settingsKind, string path = null)
        {
            var result = true;

            switch (settingsKind)
            {
            case AssetSettingsKind.AudioManager:
            case AssetSettingsKind.ClusterInputManager:
            case AssetSettingsKind.InputManager:
            case AssetSettingsKind.NavMeshAreas:
            case AssetSettingsKind.NavMeshLayers:
            case AssetSettingsKind.NavMeshProjectSettings:
            case AssetSettingsKind.NetworkManager:
                break;

            case AssetSettingsKind.NotSettings:
                Debug.LogWarning(Maintainer.ConstructWarning("Can't open settings of kind NotSettings Oo"));
                result = false;
                break;

            case AssetSettingsKind.DynamicsManager:
                if (!CSMenuTools.ShowProjectSettingsPhysics())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Physics Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.EditorBuildSettings:
                if (!CSMenuTools.ShowEditorBuildSettings())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open EditorBuildSettings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.EditorSettings:
                if (!CSMenuTools.ShowEditorSettings())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Editor Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.GraphicsSettings:
                if (!CSMenuTools.ShowProjectSettingsGraphics())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open GraphicsSettings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.Physics2DSettings:
                if (!CSMenuTools.ShowProjectSettingsPhysics2D())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Physics2D Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.ProjectSettings:
                if (!CSMenuTools.ShowProjectSettingsPlayer())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Player Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.PresetManager:
                if (!CSMenuTools.ShowProjectSettingsPresetManager())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Preset Manager!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.QualitySettings:
                break;

            case AssetSettingsKind.TagManager:
                if (!CSMenuTools.ShowProjectSettingsTagsAndLayers())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open Tags and Layers Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.TimeManager:
                break;

            case AssetSettingsKind.UnityAdsSettings:
                break;

            case AssetSettingsKind.UnityConnectSettings:
                break;

            case AssetSettingsKind.VFXManager:
                if (!CSMenuTools.ShowProjectSettingsVFX())
                {
                    Debug.LogError(Maintainer.ConstructError("Can't open VFX Settings!"));
                    result = false;
                }
                break;

            case AssetSettingsKind.Unknown:
                if (!string.IsNullOrEmpty(path))
                {
                    EditorUtility.RevealInFinder(path);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(result);
        }
Пример #6
0
 protected SettingsIssueRecord(AssetSettingsKind settingsKind, IssueKind kind, string path, string propertyPath) : base(kind, RecordLocation.Asset, path)
 {
     SettingsKind = settingsKind;
     PropertyPath = propertyPath;
 }
Пример #7
0
 protected SettingsIssueRecord(AssetSettingsKind settingsKind, IssueKind kind, string body) : base(kind, RecordLocation.Asset, null)
 {
     SettingsKind = settingsKind;
     bodyExtra    = body;
 }
Пример #8
0
 internal static SettingsIssueRecord Create(AssetSettingsKind settingsKind, IssueKind type, string path, string propertyPath)
 {
     return(new SettingsIssueRecord(settingsKind, type, path, propertyPath));
 }
Пример #9
0
 internal static SettingsIssueRecord Create(AssetSettingsKind settingsKind, IssueKind type, string body)
 {
     return(new SettingsIssueRecord(settingsKind, type, body));
 }
Пример #10
0
        private static string[] GetAssetsReferencedInPlayerSettingsAsset(string assetPath, AssetSettingsKind settingsKind)
        {
            var referencedAssets = new List <string>();

            if (settingsKind == AssetSettingsKind.EditorBuildSettings)
            {
                referencedAssets.AddRange(CSSceneTools.GetScenesInBuild(true));
            }
            else
            {
                var settingsAsset = AssetDatabase.LoadAllAssetsAtPath(assetPath);
                if (settingsAsset != null && settingsAsset.Length > 0)
                {
                    var settingsAssetSerialized = new SerializedObject(settingsAsset[0]);

                    var sp = settingsAssetSerialized.GetIterator();
                    while (sp.Next(true))
                    {
                        if (sp.propertyType == SerializedPropertyType.ObjectReference)
                        {
                            var instanceId = sp.objectReferenceInstanceIDValue;
                            if (instanceId != 0)
                            {
                                var path = CSPathTools.EnforceSlashes(AssetDatabase.GetAssetPath(instanceId));
                                if (!string.IsNullOrEmpty(path) && path.StartsWith("Assets"))
                                {
                                    if (referencedAssets.IndexOf(path) == -1)
                                    {
                                        referencedAssets.Add(path);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(referencedAssets.ToArray());
        }
Пример #11
0
        private static void FillSettingsAssetDependencies(ref HashSet <string> dependenciesGUIDs, string assetPath, AssetSettingsKind settingsKind)
        {
            if (settingsKind == AssetSettingsKind.EditorBuildSettings)
            {
                var scenesInBuildGUIDs = CSSceneTools.GetScenesInBuildGUIDs(true);
                if (scenesInBuildGUIDs != null)
                {
                    dependenciesGUIDs.UnionWith(scenesInBuildGUIDs);
                }
            }
            else
            {
                var settingsAsset = AssetDatabase.LoadAllAssetsAtPath(assetPath);
                if (settingsAsset != null && settingsAsset.Length > 0)
                {
                    var settingsAssetSerialized = new SerializedObject(settingsAsset[0]);

                    var sp = settingsAssetSerialized.GetIterator();
                    while (sp.Next(true))
                    {
                        if (sp.propertyType == SerializedPropertyType.ObjectReference)
                        {
                            var instanceId = sp.objectReferenceInstanceIDValue;
                            if (instanceId != 0)
                            {
                                var path = CSPathTools.EnforceSlashes(AssetDatabase.GetAssetPath(instanceId));
                                if (!string.IsNullOrEmpty(path) && path.StartsWith("Assets"))
                                {
                                    var guid = AssetDatabase.AssetPathToGUID(path);
                                    if (!string.IsNullOrEmpty(guid))
                                    {
                                        dependenciesGUIDs.Add(guid);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }