Skip to content

Commit 6a7036b

Browse files
committed
Add fix action in Required attribute
1 parent fcc2c39 commit 6a7036b

File tree

5 files changed

+57
-9
lines changed

5 files changed

+57
-9
lines changed

Editor.Extras/Validators/RequiredValidator.cs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
1-
using TriInspector.Validators;
1+
using JetBrains.Annotations;
2+
using TriInspector.Validators;
23
using TriInspector;
4+
using TriInspector.Resolvers;
35

46
[assembly: RegisterTriAttributeValidator(typeof(RequiredValidator), ApplyOnArrayElement = true)]
57

68
namespace TriInspector.Validators
79
{
810
public class RequiredValidator : TriAttributeValidator<RequiredAttribute>
911
{
12+
[CanBeNull] private ActionResolver _fixActionResolver;
13+
14+
public override TriExtensionInitializationResult Initialize(TriPropertyDefinition propertyDefinition)
15+
{
16+
if (Attribute.FixAction != null)
17+
{
18+
_fixActionResolver = ActionResolver.Resolve(propertyDefinition, Attribute.FixAction);
19+
}
20+
21+
return TriExtensionInitializationResult.Ok;
22+
}
23+
1024
public override TriValidationResult Validate(TriProperty property)
1125
{
1226
if (property.FieldType == typeof(string))
@@ -15,7 +29,7 @@ public override TriValidationResult Validate(TriProperty property)
1529
if (isNull)
1630
{
1731
var message = Attribute.Message ?? $"{GetName(property)} is required";
18-
return TriValidationResult.Error(message);
32+
return MakeError(message, property);
1933
}
2034
}
2135
else if (typeof(UnityEngine.Object).IsAssignableFrom(property.FieldType))
@@ -24,7 +38,7 @@ public override TriValidationResult Validate(TriProperty property)
2438
if (isNull)
2539
{
2640
var message = Attribute.Message ?? $"{GetName(property)} is required";
27-
return TriValidationResult.Error(message);
41+
return MakeError(message, property);
2842
}
2943
}
3044
else
@@ -35,6 +49,23 @@ public override TriValidationResult Validate(TriProperty property)
3549
return TriValidationResult.Valid;
3650
}
3751

52+
private TriValidationResult MakeError(string error, TriProperty property)
53+
{
54+
var result = TriValidationResult.Error(error);
55+
56+
if (_fixActionResolver != null)
57+
{
58+
result = AddFix(result, property);
59+
}
60+
61+
return result;
62+
}
63+
64+
private TriValidationResult AddFix(TriValidationResult result, TriProperty property)
65+
{
66+
return result.WithFix(() => _fixActionResolver?.InvokeForAllTargets(property), Attribute.FixActionName);
67+
}
68+
3869
private static string GetName(TriProperty property)
3970
{
4071
var name = property.DisplayName;
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
using TriInspector;
1+
using System.Linq;
2+
using TriInspector;
23
using UnityEngine;
34

45
public class Validators_RequiredSample : ScriptableObject
56
{
6-
[Required]
7-
public Material mat;
7+
[Required(FixAction = nameof(FixMaterial), FixActionName = "Find in Resources")]
8+
public Material material;
9+
10+
private void FixMaterial()
11+
{
12+
material = Resources.FindObjectsOfTypeAll<Material>().FirstOrDefault();
13+
}
814
}

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,19 @@ Tri Inspector has some builtin validators such as `missing reference` and `type
143143

144144
#### Required
145145

146-
![Required](https://user-images.githubusercontent.com/26966368/168233232-596535b4-bab8-462e-b5d8-7a1c090e5143.png)
146+
![Required](https://github.com/codewriter-packages/Tri-Inspector/assets/26966368/56a8d0ef-c88b-4b4b-8121-388b94d47841)
147147

148148
```csharp
149149
[Required]
150-
public Material mat;
150+
public Material material;
151+
152+
[Required(FixAction = nameof(FixTarget), FixActionName = "Assign self")]
153+
public Transform target;
154+
155+
private void FixTarget()
156+
{
157+
target = GetComponent<Transform>();
158+
}
151159
```
152160

153161
#### ValidateInput

Runtime/Attributes/RequiredAttribute.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@ namespace TriInspector
66
public class RequiredAttribute : Attribute
77
{
88
public string Message { get; set; }
9+
10+
public string FixAction { get; set; }
11+
public string FixActionName { get; set; }
912
}
1013
}

Runtime/TriValidationResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public TriValidationResult(bool valid, string message, TriMessageType messageTyp
2525

2626
public TriValidationResult WithFix(Action action, string name = null)
2727
{
28-
return new TriValidationResult(IsValid, Message, MessageType, action, new GUIContent(name));
28+
return new TriValidationResult(IsValid, Message, MessageType, action, new GUIContent(name ?? "Fix"));
2929
}
3030

3131
public static TriValidationResult Info(string error)

0 commit comments

Comments
 (0)