// Token: 0x0600017B RID: 379 RVA: 0x0000D0CC File Offset: 0x0000B2CC
 private static void CheckField(Task task, bool projectLevelBehavior, ref List <ErrorDetails> errorDetails, FieldInfo field, int index, object value)
 {
     if (value == null)
     {
         return;
     }
     if (TaskUtility.HasAttribute(field, typeof(RequiredFieldAttribute)) && !ErrorCheck.IsRequiredFieldValid(field.FieldType, value))
     {
         ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.RequiredField, task, index, field.Name);
     }
     if (typeof(SharedVariable).IsAssignableFrom(field.FieldType))
     {
         SharedVariable sharedVariable = value as SharedVariable;
         if (sharedVariable != null)
         {
             if (sharedVariable.IsShared && string.IsNullOrEmpty(sharedVariable.Name) && !TaskUtility.HasAttribute(field, typeof(SharedRequiredAttribute)))
             {
                 ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.SharedVariable, task, index, field.Name);
             }
             object value2 = sharedVariable.GetValue();
             if (!EditorApplication.isPlaying && projectLevelBehavior && !sharedVariable.IsShared && value2 is Object && AssetDatabase.GetAssetPath(value2 as Object).Length <= 0)
             {
                 ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.InvalidTaskReference, task, index, field.Name);
             }
         }
     }
     else if (value is Object)
     {
         bool flag = AssetDatabase.GetAssetPath(value as Object).Length > 0;
         if (!EditorApplication.isPlaying && !flag)
         {
             ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.InvalidTaskReference, task, index, field.Name);
         }
     }
     else if (!typeof(Delegate).IsAssignableFrom(field.FieldType) && (field.FieldType.IsClass || (field.FieldType.IsValueType && !field.FieldType.IsPrimitive)))
     {
         FieldInfo[] allFields = TaskUtility.GetAllFields(field.FieldType);
         for (int i = 0; i < allFields.Length; i++)
         {
             ErrorCheck.CheckField(task, projectLevelBehavior, ref errorDetails, allFields[i], index, allFields[i].GetValue(value));
         }
     }
 }
Example #2
0
 private static void CheckTaskForErrors(Task task, ref List <ErrorDetails> errorDetails)
 {
     if (task.NodeData.Disabled)
     {
         return;
     }
     if (task is UnknownTask || task is UnknownParentTask)
     {
         ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.UnknownTask, task, null);
     }
     if (task.GetType().GetCustomAttributes(typeof(SkipErrorCheckAttribute), false).Length == 0)
     {
         FieldInfo[] allFields = TaskUtility.GetAllFields(task.GetType());
         for (int i = 0; i < allFields.Length; i++)
         {
             FieldInfo fieldInfo = allFields[i];
             object    value     = fieldInfo.GetValue(task);
             if (TaskUtility.HasAttribute(fieldInfo, typeof(RequiredFieldAttribute)) && !ErrorCheck.IsRequiredFieldValid(fieldInfo.FieldType, value))
             {
                 ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.RequiredField, task, fieldInfo.Name);
             }
             if (fieldInfo.FieldType.Equals(typeof(SharedVariable)) || fieldInfo.FieldType.IsSubclassOf(typeof(SharedVariable)))
             {
                 SharedVariable sharedVariable = value as SharedVariable;
                 if (sharedVariable != null && sharedVariable.IsShared && string.IsNullOrEmpty(sharedVariable.Name) && !TaskUtility.HasAttribute(fieldInfo, typeof(SharedRequiredAttribute)))
                 {
                     ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.SharedVariable, task, fieldInfo.Name);
                 }
             }
         }
     }
     if (task is ParentTask && task.NodeData.NodeDesigner != null && !(task.NodeData.NodeDesigner as NodeDesigner).IsEntryDisplay)
     {
         ParentTask parentTask = task as ParentTask;
         if (parentTask.Children == null || parentTask.Children.Count == 0)
         {
             ErrorCheck.AddError(ref errorDetails, ErrorDetails.ErrorType.MissingChildren, task, null);
         }
         else
         {
             for (int j = 0; j < parentTask.Children.Count; j++)
             {
                 ErrorCheck.CheckTaskForErrors(parentTask.Children[j], ref errorDetails);
             }
         }
     }
 }