IEnumerable <MemberDeclarationSyntax> TransformStruct(TypeDefinition def) { var topDecl = ClassDeclaration(_names.MakeTypeName(def).Identifier) .AddModifiers(Public) .AddBaseListTypes(SimpleBaseType(Type <Capnp.ICapnpSerializable>())); if (def.GenericParameters.Count > 0) { topDecl = topDecl .AddTypeParameterListParameters(MakeTypeParameters(def).ToArray()) .AddConstraintClauses(MakeTypeParameterConstraints(def).ToArray()); } if (def.UnionInfo != null) { topDecl = topDecl.AddMembers(_commonGen.MakeUnionSelectorEnum(def)); } topDecl = topDecl.AddMembers(_domClassGen.MakeDomainClassMembers(def)); topDecl = topDecl.AddMembers(_readerGen.MakeReaderStruct(def)); topDecl = topDecl.AddMembers(_writerGen.MakeWriterStruct(def)); foreach (var nestedGroup in def.NestedGroups) { topDecl = topDecl.AddMembers(Transform(nestedGroup).ToArray()); } foreach (var nestedDef in def.NestedTypes) { topDecl = topDecl.AddMembers(Transform(nestedDef).ToArray()); } yield return(topDecl); }
public MemberDeclarationSyntax MakeInterface(TypeDefinition type) { var ifaceDecl = InterfaceDeclaration(_names.MakeTypeName(type, NameUsage.Interface).Identifier) .AddModifiers(Public) .AddAttributeLists( AttributeList() .AddAttributes( CommonSnippetGen.MakeTypeIdAttribute(type.Id), Attribute(IdentifierName("Proxy")) .AddArgumentListArguments( AttributeArgument( TypeOfExpression(_names.MakeGenericTypeNameForAttribute(type, NameUsage.Proxy)))), Attribute(IdentifierName("Skeleton")) .AddArgumentListArguments( AttributeArgument( TypeOfExpression(_names.MakeGenericTypeNameForAttribute(type, NameUsage.Skeleton)))))); if (type.GenericParameters.Count > 0) { ifaceDecl = ifaceDecl.AddTypeParameterListParameters(MakeTypeParameters(type).ToArray()); } if (type.Superclasses.Count == 0) { ifaceDecl = ifaceDecl.AddBaseListTypes(SimpleBaseType(IdentifierName(nameof(IDisposable)))); } else { foreach (var superClass in type.Superclasses) { ifaceDecl = ifaceDecl.AddBaseListTypes( SimpleBaseType(_names.MakeTypeSyntax( superClass, type, TypeUsage.NotRelevant))); } } foreach (var method in type.Methods) { var methodDecl = MethodDeclaration( TransformReturnType(method), _names.GetCodeIdentifier(method).Identifier) .AddParameterListParameters(TransformParameters(method)) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken)); if (method.GenericParameters.Count > 0) { methodDecl = methodDecl .AddTypeParameterListParameters(MakeTypeParameters(method).ToArray()) .AddConstraintClauses(MakeTypeParameterConstraints(method).ToArray()); } ifaceDecl = ifaceDecl.AddMembers(methodDecl); } return(ifaceDecl); }
PropertyDeclarationSyntax MakeGroupProperty(Field field) { var type = QualifiedName( _names.MakeTypeName(field.Type.Definition).IdentifierName, _names.WriterStruct.IdentifierName); var getter = InvocationExpression( GenericName(nameof(Capnp.SerializerState.Rewrap)) .AddTypeArgumentListArguments(type)); return(MakeWriterProperty(type, _names.GetCodeIdentifier(field).ToString(), getter, null, false, field.DiscValue.HasValue)); }
PropertyDeclarationSyntax MakeReadGroupProperty(Field field) { var type = QualifiedName( _names.MakeTypeName(field.Type.Definition).IdentifierName, _names.ReaderStruct.IdentifierName); var right = ObjectCreationExpression(type) .WithArgumentList( ArgumentList( SingletonSeparatedList( Argument(_names.ReaderContextField.IdentifierName)))); return(MakeReaderProperty(type, _names.GetCodeIdentifier(field).ToString(), right, field.DiscValue.HasValue)); }