mirror of
https://github.com/maxartz15/Validator.git
synced 2025-06-25 19:16:06 +02:00
Required Attribute Validator
This commit is contained in:
@ -2,6 +2,7 @@ namespace Validator.Editor
|
||||
{
|
||||
public interface IValidator
|
||||
{
|
||||
public string MenuName { get; }
|
||||
public Report Validate();
|
||||
}
|
||||
}
|
@ -156,7 +156,7 @@ namespace Validator.Editor
|
||||
validatorOptionsMenu.AddSeparator("");
|
||||
foreach (ValidatorInfo validatorInfo in validators)
|
||||
{
|
||||
validatorOptionsMenu.AddItem(new GUIContent($"{validatorInfo.validator.GetType().Name}"), validatorInfo.isEnabled, OnValidatorInfoVisibilityChangedEvent, validatorInfo);
|
||||
validatorOptionsMenu.AddItem(new GUIContent($"{validatorInfo.validator.MenuName}"), validatorInfo.isEnabled, OnValidatorInfoVisibilityChangedEvent, validatorInfo);
|
||||
}
|
||||
validatorOptionsMenu.ShowAsContext();
|
||||
}
|
||||
|
@ -6,9 +6,11 @@ namespace Validator.Editor
|
||||
{
|
||||
public class AssetValidator : IValidator
|
||||
{
|
||||
public string MenuName => nameof(AssetValidator);
|
||||
|
||||
public Report Validate()
|
||||
{
|
||||
Report report = new Report("AssetValidator");
|
||||
Report report = new Report(nameof(AssetValidator));
|
||||
|
||||
List<Object> objects = FindAssetsByType<Object>();
|
||||
for (int i = 0; i < objects.Count; i++)
|
||||
|
74
Editor/Validators/RequiredAttributeValidator.cs
Normal file
74
Editor/Validators/RequiredAttributeValidator.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Validator.Editor
|
||||
{
|
||||
public class RequiredAttributeAssetValidator : IValidator
|
||||
{
|
||||
public string MenuName => "Attributes/RequiredAttributeAssetValidator";
|
||||
|
||||
public Report Validate()
|
||||
{
|
||||
Report report = new Report(nameof(RequiredAttributeAssetValidator));
|
||||
|
||||
List<Object> objects = AssetValidator.FindAssetsByType<Object>();
|
||||
|
||||
for (int i = 0; i < objects.Count; i++)
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("RequiredAttributeAssetValidator", "RequiredAttribute...", (float)i / objects.Count);
|
||||
IEnumerable<(FieldInfo FieldInfo, RequiredAttribute Attribute)> fieldsWithRequiredAttribute = from fi in objects[i].GetType().GetFields()
|
||||
let attr = fi.GetCustomAttributes(typeof(RequiredAttribute), true)
|
||||
where attr.Length == 1
|
||||
select (FieldInfo: fi, Attribute: attr.First() as RequiredAttribute);
|
||||
|
||||
foreach ((FieldInfo FieldInfo, RequiredAttribute Attribute) field in fieldsWithRequiredAttribute)
|
||||
{
|
||||
object o = field.FieldInfo.GetValue(objects[i]);
|
||||
if (o == null || o.Equals(null))
|
||||
{
|
||||
report.Log(objects[i], field.Attribute.WarningType, field.Attribute.Category, $"{field.FieldInfo.Name} is null", $"Assign {field.FieldInfo.FieldType}");
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorUtility.ClearProgressBar();
|
||||
|
||||
return report;
|
||||
}
|
||||
}
|
||||
|
||||
public class RequiredAttributeSceneValidator : IValidator
|
||||
{
|
||||
public string MenuName => "Attributes/RequiredAttributeSceneValidator";
|
||||
|
||||
public Report Validate()
|
||||
{
|
||||
Report report = new Report(nameof(RequiredAttributeSceneValidator));
|
||||
|
||||
List<MonoBehaviour> objects = SceneValidator.FindAllObjectsOfType<MonoBehaviour>();
|
||||
|
||||
for (int i = 0; i < objects.Count; i++)
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("RequiredAttributeSceneValidator", "RequiredAttribute...", (float)i / objects.Count);
|
||||
IEnumerable<(FieldInfo FieldInfo, RequiredAttribute Attribute)> fieldsWithRequiredAttribute = from fi in objects[i].GetType().GetFields()
|
||||
let attr = fi.GetCustomAttributes(typeof(RequiredAttribute), true)
|
||||
where attr.Length == 1
|
||||
select (FieldInfo: fi, Attribute: attr.First() as RequiredAttribute);
|
||||
|
||||
foreach ((FieldInfo FieldInfo, RequiredAttribute Attribute) field in fieldsWithRequiredAttribute)
|
||||
{
|
||||
object o = field.FieldInfo.GetValue(objects[i]);
|
||||
if (o == null || o.Equals(null))
|
||||
{
|
||||
report.Log(objects[i], field.Attribute.WarningType, field.Attribute.Category, $"{field.FieldInfo.Name} is null", $"Assign {field.FieldInfo.FieldType}");
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorUtility.ClearProgressBar();
|
||||
|
||||
return report;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Validators/RequiredAttributeValidator.cs.meta
Normal file
11
Editor/Validators/RequiredAttributeValidator.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90d5c1b8964451644b0aa09257ab0bc3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -7,9 +7,11 @@ namespace Validator.Editor
|
||||
{
|
||||
public class SceneValidator : IValidator
|
||||
{
|
||||
public Report Validate()
|
||||
public string MenuName => nameof(SceneValidator);
|
||||
|
||||
public Report Validate()
|
||||
{
|
||||
Report report = new Report("SceneValidator");
|
||||
Report report = new Report(nameof(SceneValidator));
|
||||
|
||||
List<IValidatable> objects = FindAllObjectsOfType<IValidatable>();
|
||||
for (int i = 0; i < objects.Count; i++)
|
||||
@ -17,7 +19,7 @@ namespace Validator.Editor
|
||||
EditorUtility.DisplayProgressBar("SceneValidator", "Validate...", (float)i / objects.Count);
|
||||
|
||||
objects[i].Validate(report);
|
||||
}
|
||||
}
|
||||
EditorUtility.ClearProgressBar();
|
||||
|
||||
return report;
|
||||
@ -37,7 +39,7 @@ namespace Validator.Editor
|
||||
return gameObjects;
|
||||
}
|
||||
|
||||
private static List<T> FindAllObjectsOfType<T>()
|
||||
public static List<T> FindAllObjectsOfType<T>()
|
||||
{
|
||||
List<T> objects = new List<T>();
|
||||
|
||||
|
Reference in New Issue
Block a user