Added support to scan prefabs
This commit is contained in:
parent
269789b36f
commit
591693da1d
11 changed files with 159 additions and 62 deletions
|
|
@ -30,6 +30,7 @@ namespace Module.ProjectValidator.Editor
|
|||
var report = new Report();
|
||||
ValidateAllScenes(report);
|
||||
ValidateAllAssets(report);
|
||||
ValidateAllPrefabs(report);
|
||||
report.RebuildAssetMapping();
|
||||
report.RebuildInstanceMapping();
|
||||
report.SetAsActive();
|
||||
|
|
@ -155,7 +156,7 @@ namespace Module.ProjectValidator.Editor
|
|||
|
||||
for (var j = 0; j < rootObjects.Count; j++)
|
||||
{
|
||||
ValidateGameObject(rootObjects[j], string.Empty, report);
|
||||
ValidateGameObject(rootObjects[j], "scene:", report, true);
|
||||
}
|
||||
|
||||
if (!isLoaded)
|
||||
|
|
@ -173,6 +174,23 @@ namespace Module.ProjectValidator.Editor
|
|||
ValidateAssetsBytype<ScriptableObject>(report);
|
||||
}
|
||||
|
||||
private static void ValidateAllPrefabs(Report report)
|
||||
{
|
||||
var assets = EditorAssetUtility.LoadAllAssets<GameObject>();
|
||||
|
||||
for (var i = 0; i < assets.Length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
ValidateGameObject(assets[i], "prefab:", report, true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ValidateAssetsBytype<T>(Report report) where T : UnityEngine.Object
|
||||
{
|
||||
var assets = EditorAssetUtility.LoadAllAssets<T>();
|
||||
|
|
@ -193,12 +211,13 @@ namespace Module.ProjectValidator.Editor
|
|||
private static void ValidateUnityObject(UnityEngine.Object obj, Report report)
|
||||
{
|
||||
var assetGuid = EditorAssetUtility.ObjectToAssetGuid(obj);
|
||||
Validate(assetGuid, string.Empty, obj, report);
|
||||
var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid);
|
||||
Validate(assetGuid, $"asset:{assetPath}", obj, report);
|
||||
}
|
||||
|
||||
private static void ValidateGameObject(GameObject gameObject, string scenePath, Report report)
|
||||
private static void ValidateGameObject(GameObject gameObject, string relativePath, Report report, bool initial)
|
||||
{
|
||||
ProjectValidatorUtility.AppendToScenePath(gameObject, ref scenePath);
|
||||
ProjectValidatorUtility.AppendToRelativePath(gameObject, ref relativePath, initial);
|
||||
|
||||
var assetGuid = EditorAssetUtility.GetAssetGuid(gameObject);
|
||||
using var _ = ListPool<ValidatorResult>.Get(out var results);
|
||||
|
|
@ -215,15 +234,15 @@ namespace Module.ProjectValidator.Editor
|
|||
var result = results[j];
|
||||
|
||||
if (result.Severity != EValidatorSeverity.Valid)
|
||||
report.Add(assetGuid, scenePath, string.Empty, type, result.Severity, result.Message);
|
||||
report.Add(assetGuid, relativePath, string.Empty, type, result.Severity, result.Message);
|
||||
}
|
||||
}
|
||||
|
||||
ValidateComponents(gameObject, assetGuid, scenePath, report);
|
||||
ValidateChildren(gameObject, scenePath, report);
|
||||
ValidateComponents(gameObject, assetGuid, relativePath, report);
|
||||
ValidateChildren(gameObject, relativePath, report);
|
||||
}
|
||||
|
||||
private static void ValidateComponents(GameObject gameObject, GUID assetGuid, string scenePath, Report report)
|
||||
private static void ValidateComponents(GameObject gameObject, GUID assetGuid, string relativePath, Report report)
|
||||
{
|
||||
using var _ = ListPool<Component>.Get(out var components);
|
||||
gameObject.GetComponents(components);
|
||||
|
|
@ -231,21 +250,21 @@ namespace Module.ProjectValidator.Editor
|
|||
for (var i = 0; i < components.Count; i++)
|
||||
{
|
||||
if (components[i] != null)
|
||||
Validate(assetGuid, scenePath, components[i], report);
|
||||
Validate(assetGuid, relativePath, components[i], report);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ValidateChildren(GameObject gameObject, string scenePath, Report report)
|
||||
private static void ValidateChildren(GameObject gameObject, string relativePath, Report report)
|
||||
{
|
||||
var transform = gameObject.transform;
|
||||
|
||||
for (var i = 0; i < transform.childCount; i++)
|
||||
{
|
||||
ValidateGameObject(transform.GetChild(i).gameObject, scenePath, report);
|
||||
ValidateGameObject(transform.GetChild(i).gameObject, relativePath, report, false);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Validate(GUID assetGuid, string scenePath, object obj, Report report)
|
||||
private static void Validate(GUID assetGuid, string relativePath, object obj, Report report)
|
||||
{
|
||||
var type = obj.GetType();
|
||||
|
||||
|
|
@ -253,10 +272,10 @@ namespace Module.ProjectValidator.Editor
|
|||
return;
|
||||
|
||||
var fieldPath = obj.GetType().Name;
|
||||
Validate(assetGuid, scenePath, fieldPath, obj, entry, report);
|
||||
Validate(assetGuid, relativePath, fieldPath, obj, entry, report);
|
||||
}
|
||||
|
||||
private static void Validate(GUID assetGuid, string scenePath, string parentFieldPath, object obj, TypeTree.Entry entry, Report report)
|
||||
private static void Validate(GUID assetGuid, string relativePath, string parentFieldPath, object obj, TypeTree.Entry entry, Report report)
|
||||
{
|
||||
if (obj == null)
|
||||
return;
|
||||
|
|
@ -268,7 +287,7 @@ namespace Module.ProjectValidator.Editor
|
|||
try
|
||||
{
|
||||
var component = entry.Components[i];
|
||||
ValidateComponent(component, obj, assetGuid, scenePath, report);
|
||||
ValidateComponent(component, obj, assetGuid, relativePath, report);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -297,13 +316,13 @@ namespace Module.ProjectValidator.Editor
|
|||
{
|
||||
var fieldPathArrElement = fieldPath;
|
||||
ProjectValidatorUtility.AppendToFieldPath(idx, ref fieldPathArrElement);
|
||||
ValidateField(field, eObj, assetGuid, scenePath, fieldPathArrElement, report);
|
||||
ValidateField(field, eObj, assetGuid, relativePath, fieldPathArrElement, report);
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ValidateField(field, value, assetGuid, scenePath, fieldPath, report);
|
||||
ValidateField(field, value, assetGuid, relativePath, fieldPath, report);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
@ -333,13 +352,13 @@ namespace Module.ProjectValidator.Editor
|
|||
{
|
||||
var fieldPathArrElement = fieldPath;
|
||||
ProjectValidatorUtility.AppendToFieldPath(idx, ref fieldPathArrElement);
|
||||
Validate(assetGuid, scenePath, fieldPathArrElement, eObj, e.Entry, report);
|
||||
Validate(assetGuid, relativePath, fieldPathArrElement, eObj, e.Entry, report);
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Validate(assetGuid, scenePath, fieldPath, value, e.Entry, report);
|
||||
Validate(assetGuid, relativePath, fieldPath, value, e.Entry, report);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
@ -350,15 +369,15 @@ namespace Module.ProjectValidator.Editor
|
|||
}
|
||||
}
|
||||
|
||||
private static void ValidateField(TypeTree.ValidatorField field, object value, GUID assetGuid, string scenePath, string fieldPath, Report report)
|
||||
private static void ValidateField(TypeTree.ValidatorField field, object value, GUID assetGuid, string relativePath, string fieldPath, Report report)
|
||||
{
|
||||
var result = (ValidatorResult)field.ValidatorMethod.Invoke(field.Validator, new[] { field.Attribute, value });
|
||||
|
||||
if (result.Severity != EValidatorSeverity.Valid)
|
||||
report.Add(assetGuid, scenePath, fieldPath, field.Attribute, result.Severity, result.Message);
|
||||
report.Add(assetGuid, relativePath, fieldPath, field.Attribute, result.Severity, result.Message);
|
||||
}
|
||||
|
||||
private static void ValidateComponent(TypeTree.ValidatorComponent component, object value, GUID assetGuid, string scenePath, Report report)
|
||||
private static void ValidateComponent(TypeTree.ValidatorComponent component, object value, GUID assetGuid, string relativePath, Report report)
|
||||
{
|
||||
using var _ = ListPool<ValidatorResult>.Get(out var results);
|
||||
component.ValidatorMethod.Invoke(component.Validator, new[] { value, results });
|
||||
|
|
@ -369,7 +388,7 @@ namespace Module.ProjectValidator.Editor
|
|||
var result = results[i];
|
||||
|
||||
if (result.Severity != EValidatorSeverity.Valid)
|
||||
report.Add(assetGuid, scenePath, string.Empty, type, result.Severity, result.Message);
|
||||
report.Add(assetGuid, relativePath, string.Empty, type, result.Severity, result.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue