string BuildPythonInitializerMemberElement(DsdlType type, string fieldName, ParseTreeNode node) { switch (type) { case PrimitiveDsdlType _: var text = node.GetText(SourceText); switch (text) { case "true": text = "True"; break; case "false": text = "False"; break; case "null": text = "None"; break; } if (text.EndsWith("f", StringComparison.OrdinalIgnoreCase) && node.FindToken()?.Value is float) // Remove float 'f' suffix. { text = text.Substring(0, text.Length - 1); } return(text); case ArrayDsdlType adt when IsString(fieldName, type): return(node.GetText(SourceText)); case ArrayDsdlType adt: var nestesNodes = node.FindChild("members"); if (nestesNodes == null) { return("[]"); } var arrayContent = nestesNodes.ChildNodes.Select(x => BuildPythonInitializerMemberElement(adt.ElementType, fieldName, x)); return($"[{string.Join(", ", arrayContent)}]"); case CompositeDsdlTypeBase cdt: var t = _compoundTypesLookup[cdt]; return($"{t.Namespace}.{t.Name}(" + string.Join(", ", BuildPythonInitializerMembers(cdt.Fields, node.FindChild("members"))) + ")"); default: throw new InvalidOperationException(); } }
string BuildTestMethodMemberElement(DsdlType type, string fieldName, ParseTreeNode node) { if (IsEnum(fieldName, type)) { var enumType = GetOrCreateEnum(fieldName, type); return($"({enumType}){node.GetText(SourceText)}"); } if (IsString(fieldName, type)) { return(node.GetText(SourceText)); } switch (type) { case PrimitiveDsdlType _: return(node.GetText(SourceText)); case ArrayDsdlType adt: var nestesNodes = node.FindChild("members"); if (nestesNodes == null) { return($"new {GetCSharpType(adt, false, fieldName)} {{ }}"); } var arrayContent = nestesNodes.ChildNodes.Select(x => BuildTestMethodMemberElement(adt.ElementType, fieldName, x)); return($"new {GetCSharpType(adt, false, fieldName)} {{ {string.Join(", ", arrayContent)} }}"); case CompositeDsdlTypeBase cdt: var t = _compoundTypesLookup[cdt]; return($"new {t.CSharpName} {{ " + string.Join(", ", BuildTestMethodMembers(cdt.Fields, node.FindChild("members"))) + " }"); default: throw new InvalidOperationException(); } }