private static CodeMemberMethod CreateDeserializeCodeMemberMethod(TypeInfo messageBaseClass, Message message) { string readerParamName = "reader"; string messageVariableName = "message"; string ns = "MavLink4Net.Messages.Common"; TypeInfo typeInfo = TypeInfoHelper.GetTypeInfo(ns, message); CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = "Deserialize"; codeMemberMethod.ReturnType = new CodeTypeReference(messageBaseClass.FullName); codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(BinaryReader), readerParamName)); CodeTypeReference classTypeReference = new CodeTypeReference(typeInfo.FullName); codeMemberMethod.Statements.Add(new CodeVariableDeclarationStatement( classTypeReference, messageVariableName, new CodeObjectCreateExpression(classTypeReference))); AddReadPropertyStatements(codeMemberMethod, message, readerParamName, messageVariableName, ns); codeMemberMethod.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(messageVariableName))); return(codeMemberMethod); }
private static CodeMemberMethod CreateSerializeCodeMemberMethod(TypeInfo messageBaseClass, Message message, string messagesNamespace) { string writerParamName = "writer"; string messageParamName = "message"; CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = "Serialize"; codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(BinaryWriter), writerParamName)); codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(messageBaseClass.FullName, messageParamName)); string messageVariableName = "tMessage"; TypeInfo messageTypeInfo = TypeInfoHelper.GetTypeInfo(messagesNamespace, message); codeMemberMethod.Statements.Add(new CodeVariableDeclarationStatement( new CodeTypeReference(messageTypeInfo.FullName), messageVariableName, new CodeSnippetExpression($"{messageParamName} as {messageTypeInfo.FullName}"))); AddWritePropertyStatements(codeMemberMethod, message, writerParamName, messageVariableName); return(codeMemberMethod); }
private static void GenerateEnumFile(EnumGenerationParams pParams, MessageDefinitions.Data.Enum enumeration, TypeInfo typeInfo, CodeGeneratorOptions options, CodeDomProvider codeProvider) { string filename = TypeInfoHelper.GetFilename(typeInfo); String filePath = Path.Combine(pParams.OutputPath, filename); CodeCompileUnit unit = EnumGeneratorHelper.CreateCodeCompileUnit(typeInfo, enumeration); codeProvider.GenerateCodeFromCompileUnit(unit, options, filePath); }
private static void GenerateMessageClassFile(MessageGenerationParams pParams, MessageDefinitions.Data.Message message, CodeGeneratorOptions options, CodeDomProvider codeProvider, IDictionary <MessageDefinitions.Data.Enum, TypeInfo> enumTypeInfoByName) { TypeInfo typeInfo = TypeInfoHelper.GetTypeInfo(pParams.Namespace, message); string filename = TypeInfoHelper.GetFilename(typeInfo); String filePath = Path.Combine(pParams.OutputPath, filename); CodeCompileUnit unit = MessageGeneratorHelper.CreateCodeCompileUnit(typeInfo, message, pParams.BaseClassTypeInfo, pParams.MessageTypeEnumTypeInfo, enumTypeInfoByName); codeProvider.GenerateCodeFromCompileUnit(unit, options, filePath); }
private static void GenerateMessageTypeEnum(CodeDomProvider codeProvider, CodeGeneratorOptions options, TypeInfo messageTypeEnumTypeInfo, string outputPath, IEnumerable <Message> messages) { MessageTypeEnumGenerationParams typeEnumGenerationParams = new MessageTypeEnumGenerationParams(); string messageTypeEnumFilename = TypeInfoHelper.GetFilename(messageTypeEnumTypeInfo); typeEnumGenerationParams.OutputFilePath = Path.Combine(outputPath, messageTypeEnumFilename); typeEnumGenerationParams.TypeInfo = messageTypeEnumTypeInfo; GenerateMessageTypeEnum(codeProvider, options, typeEnumGenerationParams, messages); }
private static void GenerateCrcExtraProvider(CodeDomProvider codeProvider, CodeGeneratorOptions options, TypeInfo crcExtraProviderClassTypeInfo, IEnumerable <Message> messages, string outputPath, TypeInfo messageTypeEnumTypeInfo) { CrcExtraProviderGenerationParams messageFactoryGenerationParams = new CrcExtraProviderGenerationParams(); string filename = TypeInfoHelper.GetFilename(crcExtraProviderClassTypeInfo); messageFactoryGenerationParams.OutputFilePath = Path.Combine(outputPath, filename); messageFactoryGenerationParams.TypeInfo = crcExtraProviderClassTypeInfo; messageFactoryGenerationParams.MessageTypeEnumTypeInfo = messageTypeEnumTypeInfo; GenerateCrcExtraProvider(codeProvider, options, messageFactoryGenerationParams, messages); }
private static void GenerateMessageFactory(CodeDomProvider codeProvider, CodeGeneratorOptions options, TypeInfo serializerFactoryClassTypeInfo, IEnumerable <Message> messages, string outputPath, TypeInfo messageTypeEnumTypeInfo, TypeInfo messageInterfaceTypeInfo) { MessageFactoryGenerationParams messageFactoryGenerationParams = new MessageFactoryGenerationParams(); string factoryFilename = TypeInfoHelper.GetFilename(serializerFactoryClassTypeInfo); messageFactoryGenerationParams.OutputFilePath = Path.Combine(outputPath, factoryFilename); messageFactoryGenerationParams.TypeInfo = serializerFactoryClassTypeInfo; messageFactoryGenerationParams.CommonMessagesNamespace = ConstantHelper.Namespaces.Root_Messages_Common; messageFactoryGenerationParams.MessageTypeEnumTypeInfo = messageTypeEnumTypeInfo; messageFactoryGenerationParams.MessageInterfaceTypeInfo = messageInterfaceTypeInfo; GenerateMessageFactory(codeProvider, options, messageFactoryGenerationParams, messages); }
public static void GenerateFiles(string messageDefinitionPath, string outputPath, string language, MessageDefinitions.Data.MavLink mavLink) { String messagesPath = Path.Combine(outputPath, ConstantHelper.MessagesFolderName); System.IO.Directory.CreateDirectory(messagesPath); string serializationOutputPath = Path.Combine(outputPath, ConstantHelper.MessagesSerializationFolderName); System.IO.Directory.CreateDirectory(serializationOutputPath); string messagesCommonPath = Path.Combine(messagesPath, ConstantHelper.CommonName); System.IO.Directory.CreateDirectory(messagesCommonPath); string serializerCommonOutputPath = Path.Combine(serializationOutputPath, ConstantHelper.CommonName); System.IO.Directory.CreateDirectory(serializerCommonOutputPath); TypeInfo messageBaseClassTypeInfo = TypeInfoHelper.GetMessageClassTypeInfo(); TypeInfo messageInterfaceTypeInfo = TypeInfoHelper.GetMessageInterfaceTypeInfo(); TypeInfo messageTypeEnumTypeInfo = TypeInfoHelper.GetMavMessageTypeTypeInfo(); TypeInfo serializerInterfaceTypeInfo = TypeInfoHelper.GetSerializerInterfaceTypeInfo(); TypeInfo serializerFactoryClassTypeInfo = TypeInfoHelper.GetSerializerFactoryTypeInfo(); TypeInfo messageFactoryClassTypeInfo = TypeInfoHelper.GetMessageFactoryTypeInfo(); TypeInfo crcExtraProviderClassTypeInfo = TypeInfoHelper.GetCrcExtraProviderTypeInfo(); CodeGeneratorOptions options = new CodeGeneratorOptions() { BracingStyle = "C" }; CodeDomProvider codeProvider = CreateCodeDomProvider(language); GenerateMessageTypeEnum(codeProvider, options, messageTypeEnumTypeInfo, messagesPath, mavLink.Messages); GenerateCrcExtraProvider(codeProvider, options, crcExtraProviderClassTypeInfo, mavLink.Messages, messagesPath, messageTypeEnumTypeInfo); IDictionary <MessageDefinitions.Data.Enum, TypeInfo> typeInfoByEnum = GetTypeInfoByEnum(mavLink.Enums, ConstantHelper.Namespaces.Root_Messages_Common); GenerateEnumFiles(codeProvider, options, messagesCommonPath, typeInfoByEnum); GenerateMessageClassFiles(codeProvider, options, messagesCommonPath, messageBaseClassTypeInfo, messageTypeEnumTypeInfo, mavLink.Messages, typeInfoByEnum); GenerateSerializerClassFiles(codeProvider, options, serializerCommonOutputPath, mavLink.Messages, serializerInterfaceTypeInfo, messageInterfaceTypeInfo); GenerateSerializerFactory(codeProvider, options, serializerFactoryClassTypeInfo, mavLink.Messages, serializationOutputPath, messageTypeEnumTypeInfo, serializerInterfaceTypeInfo); GenerateMessageFactory(codeProvider, options, messageFactoryClassTypeInfo, mavLink.Messages, messagesPath, messageTypeEnumTypeInfo, messageInterfaceTypeInfo); }
private static void GenerateSerializerClassFile(SerializerGenerationParams pParams, Message message, CodeGeneratorOptions options, CodeDomProvider codeProvider) { string serializerClassName = NameHelper.GetSerializerClassName(message); TypeInfo typeInfo = new TypeInfo() { Name = serializerClassName, Namespace = pParams.Namespace }; string filename = TypeInfoHelper.GetFilename(typeInfo); String filePath = Path.Combine(pParams.OutputPath, filename); CodeCompileUnit unit = SerializerGeneratorHelper.CreateCodeCompileUnit(typeInfo, message, pParams.SerializerInterfaceTypeInfo, pParams.BaseClassTypeInfo, pParams.MessagesNamespace); codeProvider.GenerateCodeFromCompileUnit(unit, options, filePath); }