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); } }