private void AddFieldSetterDescription(Type classType, ClassInterfaceDescription classDescription)
        {
            List <IArgumentDescription> staticProperties = GetFieldDescriptions(classType, BindingFlags.Static | BindingFlags.Public);

            if (null != staticProperties && staticProperties.Count > 0)
            {
                FunctionInterfaceDescription staticSetterDesp = new FunctionInterfaceDescription()
                {
                    Name           = CommonConst.SetStaticFieldFunc,
                    Arguments      = staticProperties,
                    ClassType      = classDescription.ClassType,
                    ComponentIndex = classDescription.ComponentIndex,
                    FuncType       = FunctionType.StaticFieldSetter,
                    Signature      = ModuleUtils.GetSignature(classType.Name, CommonConst.SetStaticFieldFunc),
                    Return         = null,
                    IsGeneric      = false
                };
                classDescription.Functions.Add(staticSetterDesp);
            }

            List <IArgumentDescription> instanceProperties = GetFieldDescriptions(classType, BindingFlags.Instance | BindingFlags.Public);

            if (null != instanceProperties && instanceProperties.Count > 0)
            {
                FunctionInterfaceDescription instanceSetterDesp = new FunctionInterfaceDescription()
                {
                    Name           = CommonConst.SetInstanceFieldFunc,
                    Arguments      = instanceProperties,
                    ClassType      = classDescription.ClassType,
                    ComponentIndex = classDescription.ComponentIndex,
                    FuncType       = FunctionType.InstanceFieldSetter,
                    Signature      = ModuleUtils.GetSignature(classType.Name, CommonConst.SetInstanceFieldFunc),
                    Return         = null,
                    IsGeneric      = false
                };
                classDescription.Functions.Add(instanceSetterDesp);
            }
        }
 public ClassInterfaceDescription GetClassDescription(string assemblyName, string typeFullName, out string path,
                                                      out string version)
 {
     Exception = null;
     ErrorCode = 0;
     path      = string.Empty;
     version   = Constants.DefaultVersion;
     if (!_assemblies.ContainsKey(assemblyName))
     {
         ErrorCode = ModuleErrorCode.AssemblyNotLoad;
         return(null);
     }
     try
     {
         Assembly assembly = _assemblies[assemblyName];
         path    = assembly.Location;
         version = assembly.GetName().Version.ToString();
         Type classType = assembly.GetType(typeFullName);
         if (null == classType)
         {
             ErrorCode = ModuleErrorCode.TypeCannotLoad;
             return(null);
         }
         VariableType classKind = GetKindOfType(classType);
         TestflowCategoryAttribute categoryAttr    = classType.GetCustomAttribute <TestflowCategoryAttribute>();
         DescriptionAttribute      descriptionAttr = classType.GetCustomAttribute <DescriptionAttribute>();
         string          typeCategory        = null != categoryAttr ? categoryAttr.CategoryString : string.Empty;
         string          classDescriptionStr = null != descriptionAttr ? descriptionAttr.Description : string.Empty;
         TypeDescription typeDescription     = new TypeDescription
         {
             AssemblyName = assemblyName,
             Category     = typeCategory,
             Name         = GetTypeName(classType),
             Namespace    = GetNamespace(classType),
             Description  = classDescriptionStr,
             Kind         = classKind
         };
         ClassInterfaceDescription classDescription = new ClassInterfaceDescription
         {
             ClassTypeDescription = typeDescription,
             Description          = typeDescription.Description,
             Name = GetTypeName(classType),
             Kind = classKind
         };
         classDescription.IsStatic = classKind == VariableType.Class && classDescription.Functions.All(
             item => item.FuncType != FunctionType.Constructor && item.FuncType != FunctionType.InstanceFunction);
         if (classKind == VariableType.Class || classKind == VariableType.Struct)
         {
             AddConstructorDescription(classType, classDescription, classKind);
             AddPropertySetterDescription(classType, classDescription);
             AddFieldSetterDescription(classType, classDescription);
             AddMethodDescription(classType, classDescription);
         }
         return(classDescription);
     }
     catch (Exception ex)
     {
         ErrorCode = ModuleErrorCode.LibraryLoadError;
         Exception = ex;
         return(null);
     }
 }