in SharpGen/Generator/StructCodeGenerator.cs [15:63]
public override IEnumerable<MemberDeclarationSyntax> GenerateCode(CsStruct csElement)
{
var innerStructs = csElement.InnerStructs.SelectMany(GenerateCode);
var constants = csElement.Variables.SelectMany(var => Generators.Constant.GenerateCode(var));
var fields = csElement.PublicFields.SelectMany(field =>
{
var explicitLayout = !csElement.HasMarshalType && csElement.ExplicitLayout;
var generator = explicitLayout ? Generators.ExplicitOffsetField : Generators.AutoLayoutField;
return generator.GenerateCode(field);
});
var marshallingStructAndConversions = csElement.HasMarshalType && !csElement.HasCustomMarshal
? Generators.NativeStruct.GenerateCode(csElement)
: Enumerable.Empty<MemberDeclarationSyntax>();
var attributeList = !csElement.HasMarshalType
? SingletonList(NativeStructCodeGenerator.GenerateStructLayoutAttribute(csElement))
: default;
var modifierTokenList = csElement.VisibilityTokenList.Add(Token(SyntaxKind.PartialKeyword));
var identifier = Identifier(csElement.Name);
var memberList = List(
innerStructs.Concat(constants).Concat(fields).Concat(marshallingStructAndConversions)
);
MemberDeclarationSyntax declaration = csElement.GenerateAsClass
? ClassDeclaration(
attributeList,
modifierTokenList,
identifier,
default,
default,
default,
memberList
)
: StructDeclaration(
attributeList,
modifierTokenList,
identifier,
default,
default,
default,
memberList
);
yield return AddDocumentationTrivia(declaration, csElement);
}