<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="xsl msxsl" > <xsl:import href="common.xslt"/> <xsl:param name="help"/> <xsl:param name="xml"/> <xsl:param name="datacontract"/> <xsl:param name="binary"/> <xsl:param name="protoRpc"/> <xsl:param name="observable"/> <xsl:param name="preObservable"/> <xsl:param name="partialMethods"/> <xsl:param name="detectMissing"/> <xsl:param name="lightFramework"/> <xsl:param name="asynchronous"/> <xsl:param name="clientProxy"/> <xsl:param name="defaultNamespace"/> <xsl:key name="fieldNames" match="//FieldDescriptorProto" use="name"/> <xsl:output method="text" indent="no" omit-xml-declaration="yes"/> <xsl:variable name="types" select="//EnumDescriptorProto | //DescriptorProto"/> <xsl:variable name="optionXml" select="$xml='true'"/> <xsl:variable name="optionDataContract" select="$datacontract='true'"/> <xsl:variable name="optionBinary" select="$binary='true'"/> <xsl:variable name="optionProtoRpc" select="$protoRpc='true'"/> <xsl:variable name="optionObservable" select="$observable='true'"/> <xsl:variable name="optionPreObservable" select="$preObservable='true'"/> <xsl:variable name="optionPartialMethods" select="$partialMethods='true'"/> <xsl:variable name="optionDetectMissing" select="$detectMissing='true'"/> <xsl:variable name="optionFullFramework" select="not($lightFramework='true')"/> <xsl:variable name="optionAsynchronous" select="$asynchronous='true'"/> <xsl:variable name="optionClientProxy" select="$clientProxy='true'"/> <xsl:variable name="optionFixCase" select="$fixCase='true'"/> <xsl:template match="FileDescriptorSet"> <xsl:if test="$help='true'"> <xsl:message terminate="yes"> VisualBasic template for protobuf-net. Options: General: "help" - this page Additional serializer support: "xml" - enable explicit xml support (XmlSerializer) "datacontract" - enable data-contract support (DataContractSerializer; requires .NET 3.0) "binary" - enable binary support (BinaryFormatter; not supported on Silverlight) Other: "protoRpc" - enable proto-rpc client "observable" - change notification (observer pattern) support "preObservable" - pre-change notification (observer pattern) support (requires .NET 3.5) "partialMethods" - provide partial methods for changes (requires C# 3.0) "detectMissing" - provide *Specified properties to indicate whether fields are present "lightFramework" - omit additional attributes not included in CF/Silverlight "asynchronous" - emit asynchronous methods for use with WCF "clientProxy" - emit asynchronous client proxy class </xsl:message> </xsl:if> <xsl:if test="$optionXml and $optionDataContract"> <xsl:message terminate="yes"> Invalid options: xml and data-contract serialization are mutually exclusive. </xsl:message> </xsl:if> ' Generated from <xsl:value-of select="name"/> <xsl:if test="$optionXml"> ' Option: xml serialization ([XmlType]/[XmlElement]) enabled </xsl:if><xsl:if test="$optionDataContract"> ' Option: data-contract serialization ([DataContract]/[DataMember]) enabled </xsl:if><xsl:if test="$optionBinary"> ' Option: binary serialization (ISerializable) enabled </xsl:if><xsl:if test="$optionObservable"> ' Option: observable (OnPropertyChanged) enabled </xsl:if><xsl:if test="$optionPreObservable"> ' Option: pre-observable (OnPropertyChanging) enabled </xsl:if><xsl:if test="$partialMethods"> ' Option: partial methods (On*Changing/On*Changed) enabled </xsl:if><xsl:if test="$detectMissing"> ' Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled </xsl:if><xsl:if test="not($optionFullFramework)"> ' Option: light framework (CF/Silverlight) enabled </xsl:if><xsl:if test="$optionProtoRpc"> ' Option: proto-rpc enabled </xsl:if> <xsl:apply-templates select="file/FileDescriptorProto"/> </xsl:template> <xsl:template match="FileDescriptorProto"> ' Generated from: <xsl:value-of select="name"/> <xsl:apply-templates select="dependency/string[.!='']"/> <xsl:variable name="namespace"><xsl:call-template name="PickNamespace"> <xsl:with-param name="defaultNamespace" select="$defaultNamespace"/> </xsl:call-template> </xsl:variable> <xsl:if test="string($namespace) != ''"> Namespace <xsl:value-of select="translate($namespace,':-/\','__..')"/> </xsl:if> <xsl:apply-templates select="message_type | enum_type | service"/> <xsl:if test="string($namespace) != ''"> End Namespace</xsl:if></xsl:template> <xsl:template match="FileDescriptorProto/dependency/string"> ' Note: requires additional types generated from: <xsl:value-of select="."/></xsl:template> <xsl:template match="DescriptorProto"> <xsl:choose> <xsl:when test="$optionDataContract"> <Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")> _ <Global.System.Runtime.Serialization.DataContract(Name:="<xsl:value-of select="name"/>")> _ </xsl:when> <xsl:when test="$optionXml"> <Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")> _ <Global.System.Xml.Serialization.XmlType(TypeName:="<xsl:value-of select="name"/>")> _ </xsl:when> <xsl:otherwise> <Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")> _ </xsl:otherwise> </xsl:choose><!-- -->Public Partial Class <xsl:call-template name="pascal"/> implements Global.ProtoBuf.IExtensible<!-- --><xsl:if test="$optionBinary">, Global.System.Runtime.Serialization.ISerializable</xsl:if><!-- --><xsl:if test="$optionObservable">, Global.System.ComponentModel.INotifyPropertyChanged</xsl:if><!-- --><xsl:if test="$optionPreObservable">, Global.System.ComponentModel.INotifyPropertyChanging</xsl:if> Public Sub New End Sub <xsl:apply-templates select="*"/><xsl:if test="$optionBinary"> Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) MyBase.New() Global.ProtoBuf.Serializer.Merge(info, Me) End Sub Sub GetObjectData(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) implements Global.System.Runtime.Serialization.ISerializable.GetObjectData Global.ProtoBuf.Serializer.Serialize(info, Me) End Sub </xsl:if><xsl:if test="$optionObservable"> Public Event PropertyChanged As Global.System.ComponentModel.PropertyChangedEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanged.PropertyChanged Protected Overridable Sub OnPropertyChanged(ByVal propertyName As String) RaiseEvent PropertyChanged(Me, New Global.System.ComponentModel.PropertyChangedEventArgs(propertyName)) End Sub </xsl:if><xsl:if test="$optionPreObservable"> Public Event PropertyChanging As Global.System.ComponentModel.PropertyChangingEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanging.PropertyChanging Protected Overridable Sub OnPropertyChanging(ByVal propertyName As String) RaiseEvent PropertyChanging(Me, New Global.System.ComponentModel.PropertyChangingEventArgs(propertyName)) End Sub </xsl:if> Private extensionObject As Global.ProtoBuf.IExtension Function GetExtensionObject(createIfMissing As Boolean) As Global.ProtoBuf.IExtension Implements Global.ProtoBuf.IExtensible.GetExtensionObject Return Global.ProtoBuf.Extensible.GetExtensionObject(extensionObject, createIfMissing) End Function End Class </xsl:template> <xsl:template match="DescriptorProto/name | DescriptorProto/extension_range | DescriptorProto/extension"/> <xsl:template match=" FileDescriptorProto/message_type | FileDescriptorProto/enum_type | FileDescriptorProto/service | DescriptorProto/field | DescriptorProto/enum_type | DescriptorProto/message_type | DescriptorProto/nested_type | EnumDescriptorProto/value | ServiceDescriptorProto/method"> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="EnumDescriptorProto"> Public Enum <xsl:call-template name="pascal"/> <xsl:apply-templates select="value"/> End Enum </xsl:template> <xsl:template match="EnumValueDescriptorProto"> <xsl:text> </xsl:text> <xsl:value-of select="name"/> <xsl:text xml:space="preserve"> = </xsl:text><xsl:choose> <xsl:when test="number"><xsl:value-of select="number"/></xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose><xsl:if test="position()!=last()"> </xsl:if> </xsl:template> <xsl:template match="FieldDescriptorProto" mode="field"> <xsl:choose> <xsl:when test="not(key('fieldNames',concat('_',name)))"><xsl:value-of select="concat('_',name)"/></xsl:when> <xsl:when test="not(key('fieldNames',concat(name,'Field')))"><xsl:value-of select="concat(name,'Field')"/></xsl:when> <xsl:otherwise><xsl:value-of select="concat('_',generate-id())"/></xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="FieldDescriptorProto" mode="format"> <xsl:choose> <xsl:when test="type='TYPE_DOUBLE' or type='TYPE_FLOAT' or type='TYPE_FIXED32' or type='TYPE_FIXED64' or type='TYPE_SFIXED32' or type='TYPE_SFIXED64'">FixedSize</xsl:when> <xsl:when test="type='TYPE_GROUP'">Group</xsl:when> <xsl:when test="not(type) or type='TYPE_INT32' or type='TYPE_INT64' or type='TYPE_UINT32' or type='TYPE_UINT64' or type='TYPE_ENUM'">TwosComplement</xsl:when> <xsl:when test="type='TYPE_SINT32' or type='TYPE_SINT64'">ZigZag</xsl:when> <xsl:otherwise>Default</xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="FieldDescriptorProto" mode="primitiveType"> <xsl:choose> <xsl:when test="not(type)">struct</xsl:when> <xsl:when test="type='TYPE_DOUBLE'">struct</xsl:when> <xsl:when test="type='TYPE_FLOAT'">struct</xsl:when> <xsl:when test="type='TYPE_INT64'">struct</xsl:when> <xsl:when test="type='TYPE_UINT64'">struct</xsl:when> <xsl:when test="type='TYPE_INT32'">struct</xsl:when> <xsl:when test="type='TYPE_FIXED64'">struct</xsl:when> <xsl:when test="type='TYPE_FIXED32'">struct</xsl:when> <xsl:when test="type='TYPE_BOOL'">struct</xsl:when> <xsl:when test="type='TYPE_STRING'">class</xsl:when> <xsl:when test="type='TYPE_BYTES'">class</xsl:when> <xsl:when test="type='TYPE_UINT32'">struct</xsl:when> <xsl:when test="type='TYPE_SFIXED32'">struct</xsl:when> <xsl:when test="type='TYPE_SFIXED64'">struct</xsl:when> <xsl:when test="type='TYPE_SINT32'">struct</xsl:when> <xsl:when test="type='TYPE_SINT64'">struct</xsl:when> <xsl:when test="type='TYPE_ENUM'">struct</xsl:when> <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE'">none</xsl:when> <xsl:otherwise> <xsl:message terminate="yes"> Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>) </xsl:message> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="FieldDescriptorProto" mode="type"> <xsl:choose> <xsl:when test="not(type)">double</xsl:when> <xsl:when test="type='TYPE_DOUBLE'">Double</xsl:when> <xsl:when test="type='TYPE_FLOAT'">Single</xsl:when> <xsl:when test="type='TYPE_INT64'">Long</xsl:when> <xsl:when test="type='TYPE_UINT64'">ULong</xsl:when> <xsl:when test="type='TYPE_INT32'">Integer</xsl:when> <xsl:when test="type='TYPE_FIXED64'">ULong</xsl:when> <xsl:when test="type='TYPE_FIXED32'">UInteger</xsl:when> <xsl:when test="type='TYPE_BOOL'">Boolean</xsl:when> <xsl:when test="type='TYPE_STRING'">String</xsl:when> <xsl:when test="type='TYPE_BYTES'">Byte()</xsl:when> <xsl:when test="type='TYPE_UINT32'">UInteger</xsl:when> <xsl:when test="type='TYPE_SFIXED32'">Integer</xsl:when> <xsl:when test="type='TYPE_SFIXED64'">Long</xsl:when> <xsl:when test="type='TYPE_SINT32'">Integer</xsl:when> <xsl:when test="type='TYPE_SINT64'">Long</xsl:when> <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE' or type='TYPE_ENUM'"><xsl:call-template name="pascal"> <xsl:with-param name="value" select="substring-after(type_name,'.')"/> </xsl:call-template></xsl:when> <xsl:otherwise> <xsl:message terminate="yes"> Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>) </xsl:message> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="FieldDescriptorProto[default_value]" mode="defaultValue"> <xsl:choose> <xsl:when test="type='TYPE_STRING'">"<xsl:value-of select="default_value"/>"</xsl:when> <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:value-of select="default_value"/></xsl:when> <xsl:when test="type='TYPE_BYTES'"> ' <xsl:value-of select="default_value"/></xsl:when> <xsl:otherwise>CType(<xsl:value-of select="default_value"/>, <xsl:apply-templates select="." mode="type"/>)</xsl:otherwise> </xsl:choose> </xsl:template> <!-- We need to find the first enum value given .foo.bar.SomeEnum - but the enum itself only knows about SomeEnum; we need to look at all parent DescriptorProto nodes, and the FileDescriptorProto for the namespace. This does an annoying up/down recursion... a bit expensive, but *generally* OK. Could perhaps index the last part of the enum name to reduce overhead? --> <xsl:template name="GetFirstEnumValue"> <xsl:variable name="hunt" select="type_name"/> <xsl:for-each select="//EnumDescriptorProto"> <xsl:variable name="fullName"> <xsl:for-each select="ancestor::FileDescriptorProto">.<xsl:value-of select="package"/></xsl:for-each> <xsl:for-each select="ancestor::DescriptorProto">.<xsl:value-of select="name"/></xsl:for-each> <xsl:value-of select="concat('.',name)"/> </xsl:variable> <xsl:if test="$fullName=$hunt"><xsl:value-of select="(value/EnumValueDescriptorProto)[1]/name"/></xsl:if> </xsl:for-each> </xsl:template> <xsl:template match="FieldDescriptorProto[not(default_value)]" mode="defaultValue"> <xsl:choose> <xsl:when test="type='TYPE_DOUBLE'">0.0</xsl:when> <xsl:when test="type='TYPE_FLOAT'">0.0F</xsl:when> <xsl:when test="type='TYPE_INT64'">0L</xsl:when> <xsl:when test="type='TYPE_UINT64'">0L</xsl:when> <xsl:when test="type='TYPE_INT32'">0</xsl:when> <xsl:when test="type='TYPE_FIXED64'">0L</xsl:when> <xsl:when test="type='TYPE_FIXED32'">0</xsl:when> <xsl:when test="type='TYPE_BOOL'">False</xsl:when> <xsl:when test="type='TYPE_STRING'">""</xsl:when> <xsl:when test="type='TYPE_BYTES'">Nothing</xsl:when> <xsl:when test="type='TYPE_UINT32'">0</xsl:when> <xsl:when test="type='TYPE_SFIXED32'">0</xsl:when> <xsl:when test="type='TYPE_SFIXED64'">0L</xsl:when> <xsl:when test="type='TYPE_SINT32'">0</xsl:when> <xsl:when test="type='TYPE_SINT64'">0L</xsl:when> <xsl:when test="type='TYPE_MESSAGE'">Nothing</xsl:when> <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:call-template name="GetFirstEnumValue"/></xsl:when> <xsl:otherwise>Nothing</xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="FieldDescriptorProto[label='LABEL_OPTIONAL' or not(label)]"> <xsl:variable name="propType"><xsl:apply-templates select="." mode="type"/></xsl:variable> <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable> <xsl:variable name="primitiveType"><xsl:apply-templates select="." mode="primitiveType"/></xsl:variable> <xsl:variable name="defaultValue"><xsl:apply-templates select="." mode="defaultValue"/></xsl:variable> <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable> <xsl:variable name="specified" select="$optionDetectMissing and ($primitiveType='struct' or $primitiveType='class')"/> <xsl:variable name="fieldType"><xsl:if test="$specified and $primitiveType='struct'">Nullable(Of </xsl:if><xsl:value-of select="$propType"/><xsl:if test="$specified and $primitiveType='struct'">)</xsl:if></xsl:variable> <xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> Private <xsl:value-of select="concat($field,' As ',substring-after($fieldType, 'google.protobuf.'))"/><xsl:if test="not($specified)"> =<xsl:value-of select="$defaultValue"/></xsl:if> </xsl:when> <xsl:otherwise> Private <xsl:value-of select="concat($field,' As ',$fieldType)"/><xsl:if test="not($specified)"> =<xsl:value-of select="$defaultValue"/></xsl:if> </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="not($specified) and $optionXml"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))> _ </xsl:when> <xsl:otherwise> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))> _ </xsl:otherwise> </xsl:choose> <Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)> _ <!-- --></xsl:when> <xsl:when test="not($specified) and $optionDataContract"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))> _ </xsl:when> <xsl:otherwise> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))> _ </xsl:otherwise> </xsl:choose> <Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)> _ <!-- --></xsl:when> <xsl:when test="not($specified)"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <!-- --><xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))> _ <!-- --></xsl:when> <xsl:otherwise> <Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))> _ <!-- --></xsl:otherwise> </xsl:choose><!-- --></xsl:when> <xsl:when test="$optionDataContract"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)> _ <!-- --></xsl:when> <xsl:when test="$optionXml"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)> _ <!-- --></xsl:when> <xsl:otherwise> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <!-- --></xsl:otherwise> </xsl:choose><!-- --><xsl:call-template name="WriteGetSet"> <xsl:with-param name="fieldType" select="$fieldType"/> <xsl:with-param name="propType" select="$propType"/> <xsl:with-param name="name"><xsl:call-template name="pascalPropName"/></xsl:with-param> <xsl:with-param name="field" select="$field"/> <xsl:with-param name="defaultValue" select="$defaultValue"/> <xsl:with-param name="specified" select="$specified"/> </xsl:call-template> </xsl:template> <xsl:template name="pascalPropName"> <xsl:param name="value" select="name"/> <xsl:param name="delimiter" select="'_'"/> <xsl:variable name="valueUC" select="translate($value,$alpha,$ALPHA)"/> <xsl:variable name="finalName"> <xsl:choose> <xsl:when test="$types[translate(name,$alpha,$ALPHA)=$valueUC]"><xsl:value-of select="concat($value,$delimiter,'Property')"/></xsl:when> <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:call-template name="pascal"> <xsl:with-param name="value" select="$finalName"/> <xsl:with-param name="delimiter" select="$delimiter"/> </xsl:call-template> </xsl:template> <xsl:template match="FieldDescriptorProto[label='LABEL_REQUIRED']"> <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable> <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable> <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable> Private <xsl:value-of select="concat($field, ' As ', $type)"/> <xsl:choose> <xsl:when test="$optionDataContract"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=True)> _ <!-- --></xsl:when> <xsl:when test="$optionXml"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)> _ <!-- --></xsl:when> <xsl:otherwise> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <!-- --></xsl:otherwise> </xsl:choose><!-- --><xsl:call-template name="WriteGetSet"> <xsl:with-param name="fieldType" select="$type"/> <xsl:with-param name="propType" select="$type"/> <xsl:with-param name="name" select="name"/> <xsl:with-param name="field" select="$field"/> </xsl:call-template> </xsl:template> <xsl:template name="WriteGetSet"> <xsl:param name="fieldType"/> <xsl:param name="propType"/> <xsl:param name="name"/> <xsl:param name="field"/> <xsl:param name="specified" select="false()"/> <xsl:param name="defaultValue"/> <xsl:variable name="primitiveType"><xsl:apply-templates select="." mode="primitiveType"/></xsl:variable> <xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> Public Property <xsl:value-of select="concat($name,' As ',substring-after($fieldType, 'google.protobuf.'))"/> </xsl:when> <xsl:otherwise> Public Property <xsl:value-of select="concat($name,' As ',$fieldType)"/> </xsl:otherwise> </xsl:choose> Get <xsl:choose> <xsl:when test="$specified and $primitiveType='struct'"><!-- -->Return <xsl:value-of select="$field"/><!-- --></xsl:when> <xsl:when test="$specified"> If Not <xsl:value-of select="$field"/> Is Nothing Then Return <xsl:value-of select="$field"/> Else Return <xsl:value-of select="$defaultValue"/> End If<!-- --></xsl:when> <xsl:otherwise><!-- -->Return <xsl:value-of select="$field"/><!-- --></xsl:otherwise> </xsl:choose> End Get <xsl:choose> <xsl:when test="substring-after($fieldType, 'google.protobuf.')"> Set(<xsl:value-of select="concat('value As ',substring-after($fieldType, 'google.protobuf.'))"/>) </xsl:when> <xsl:otherwise> Set(<xsl:value-of select="concat('value As ',$fieldType)"/>) </xsl:otherwise> </xsl:choose> <xsl:if test="$optionPartialMethods">On<xsl:value-of select="$name"/>Changing(value) </xsl:if><xsl:if test="$optionPreObservable">OnPropertyChanging("<xsl:value-of select="$name"/>") </xsl:if><xsl:value-of select="$field"/> = value <xsl:if test="$optionObservable">OnPropertyChanged("<xsl:value-of select="$name"/>") </xsl:if><xsl:if test="$optionPartialMethods">On<xsl:value-of select="$name"/>Changed()</xsl:if> End Set End Property <xsl:if test="$optionPartialMethods"> partial void On<xsl:value-of select="$name"/>Changing(<xsl:value-of select="$propType"/> value); partial void On<xsl:value-of select="$name"/>Changed();</xsl:if><xsl:if test="$specified"> <Global.System.Xml.Serialization.XmlIgnore> _ <xsl:if test="$optionFullFramework"><Global.System.ComponentModel.Browsable(false)> _ </xsl:if> <xsl:choose> <xsl:when test="$specified and $primitiveType='struct'"> Public Property <xsl:value-of select="$name"/>Specified As Boolean Get Return <xsl:value-of select="$field"/>.HasValue End Get Set (ByVal value As Boolean) If Not <xsl:value-of select="$field"/>.HasValue Then If value = True then <xsl:value-of select="$field"/> = <xsl:value-of select="$name"/> Else If value = False then <xsl:value-of select="$field"/> = Nothing End If End Set End Property </xsl:when> <xsl:otherwise> Public Property <xsl:value-of select="$name"/>Specified As Boolean Get Return <xsl:value-of select="$field"/> IsNot Nothing End Get Set (ByVal value As Boolean) If <xsl:value-of select="$field"/> Is Nothing Then If value = True then <xsl:value-of select="$field"/> = <xsl:value-of select="$name"/> Else If value = False then <xsl:value-of select="$field"/> = Nothing End If End Set End Property </xsl:otherwise> </xsl:choose> Private Function ShouldSerialize<xsl:value-of select="$name"/>() As Boolean Return <xsl:value-of select="$name"/>Specified End Function Private Sub Reset<xsl:value-of select="$name"/>() <xsl:value-of select="$name"/>Specified = false End Sub </xsl:if> </xsl:template> <xsl:template match="FieldDescriptorProto[label='LABEL_REPEATED']"> <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable> <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable> <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable> <xsl:choose> <xsl:when test="substring-after($type, 'google.protobuf.')"> Private <xsl:if test="not($optionXml)">ReadOnly </xsl:if> <xsl:value-of select="$field"/> as Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />) = New Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')"/>)() </xsl:when> <xsl:otherwise> Private <xsl:if test="not($optionXml)">ReadOnly </xsl:if> <xsl:value-of select="$field"/> as Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />) = New Global.System.Collections.Generic.List(Of <xsl:value-of select="$type"/>)() </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="$optionDataContract"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)> _ </xsl:when> <xsl:when test="$optionXml"> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ <Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)> _ </xsl:when> <xsl:otherwise> <Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)> _ </xsl:otherwise> </xsl:choose><!-- --><xsl:choose> <xsl:when test="substring-after($type, 'google.protobuf.')"><!-- -->Public <xsl:if test="not($optionXml)">ReadOnly </xsl:if>Property <xsl:value-of select="name"/> As Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />) </xsl:when> <xsl:otherwise><!-- -->Public <xsl:if test="not($optionXml)">ReadOnly </xsl:if>Property <xsl:value-of select="name"/> As Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />) </xsl:otherwise> </xsl:choose> Get Return <xsl:value-of select="$field"/> End Get <!----><xsl:if test="$optionXml"> <xsl:choose> <xsl:when test="substring-after($type, 'google.protobuf.')"> Set (value As Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />)) </xsl:when> <xsl:otherwise> Set (value As Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />)) </xsl:otherwise> </xsl:choose> <xsl:value-of select="$field"/> = value End Set </xsl:if> End Property </xsl:template> <xsl:template match="ServiceDescriptorProto"> <xsl:if test="($optionClientProxy or $optionDataContract)"> <Global.System.ServiceModel.ServiceContract(Name:="<xsl:value-of select="name"/>")> _ </xsl:if> Public Interface I<xsl:value-of select="name"/> <xsl:apply-templates select="method"/> End Interface <xsl:if test="$optionProtoRpc"> Public Class <xsl:value-of select="name"/>Client : Global.ProtoBuf.ServiceModel.RpcClient public <xsl:value-of select="name"/>Client() : base(typeof(I<xsl:value-of select="name"/>)) { } <xsl:apply-templates select="method/MethodDescriptorProto" mode="protoRpc"/> End Class </xsl:if> <xsl:apply-templates select="." mode="clientProxy"/> </xsl:template> <xsl:template match="MethodDescriptorProto"> <xsl:if test="$optionDataContract"> <Global.System.ServiceModel.OperationContract(Name:="<xsl:value-of select="name"/>")> _ <Global.ProtoBuf.ServiceModel.ProtoBehavior()> _ </xsl:if> <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request); <xsl:if test="$optionAsynchronous and $optionDataContract"> <Global.System.ServiceModel.OperationContract(AsyncPattern:=True, Name:="<xsl:value-of select="name"/>")> _ Global.System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, Global.System.AsyncCallback callback, object state); <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(Global.System.IAsyncResult ar); </xsl:if> </xsl:template> <xsl:template match="MethodDescriptorProto" mode="protoRpc"> <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request) { return (<xsl:apply-templates select="output_type"/>) Send("<xsl:value-of select="name"/>", request); } </xsl:template> <xsl:template match="MethodDescriptorProto/input_type | MethodDescriptorProto/output_type"> <xsl:value-of select="substring-after(.,'.')"/> </xsl:template> <xsl:template match="MethodDescriptorProto" mode="CompleteEvent"> <xsl:if test="$optionAsynchronous and $optionDataContract"> Public Class <xsl:value-of select="name"/>CompletedEventArgs : Global.System.ComponentModel.AsyncCompletedEventArgs private object[] results; public <xsl:value-of select="name"/>CompletedEventArgs(object[] results, Global.System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } public <xsl:apply-templates select="output_type"/> Result { get { base.RaiseExceptionIfNecessary(); return (<xsl:apply-templates select="output_type"/>)(this.results[0]); } } End Class </xsl:if> </xsl:template> <xsl:template match="ServiceDescriptorProto" mode="clientProxy"> <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy"> <xsl:apply-templates select="method/MethodDescriptorProto" mode="CompleteEvent"/> <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _ public partial class <xsl:value-of select="name"/>Client : Global.System.ServiceModel.ClientBase<I<xsl:value-of select="name"/>>, I<xsl:value-of select="name"/> { public <xsl:value-of select="name"/>Client() {} public <xsl:value-of select="name"/>Client(string endpointConfigurationName) : base(endpointConfigurationName) {} public <xsl:value-of select="name"/>Client(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) {} public <xsl:value-of select="name"/>Client(string endpointConfigurationName, Global.System.ServiceModel.EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) {} public <xsl:value-of select="name"/>Client(Global.System.ServiceModel.Channels.Binding binding, Global.System.ServiceModel.EndpointAddress remoteAddress) : base(binding, remoteAddress) {} <xsl:apply-templates select="method/MethodDescriptorProto" mode="clientProxy"/> } </xsl:if> </xsl:template> <xsl:template match="MethodDescriptorProto" mode="clientProxy"> <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy"> private BeginOperationDelegate onBegin<xsl:value-of select="name"/>Delegate; private EndOperationDelegate onEnd<xsl:value-of select="name"/>Delegate; private Global.System.Threading.SendOrPostCallback on<xsl:value-of select="name"/>CompletedDelegate; public event Global.System.EventHandler<<xsl:value-of select="name"/>CompletedEventArgs> <xsl:value-of select="name"/>Completed; public <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request) { return base.Channel.<xsl:value-of select="name"/>(request); } <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ public Global.System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, Global.System.AsyncCallback callback, object asyncState) { return base.Channel.Begin<xsl:value-of select="name"/>(request, callback, asyncState); } <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ public <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(Global.System.IAsyncResult result) { return base.Channel.End<xsl:value-of select="name"/>(result); } private Global.System.IAsyncResult OnBegin<xsl:value-of select="name"/>(object[] inValues, Global.System.AsyncCallback callback, object asyncState) { <xsl:apply-templates select="input_type"/> request = ((<xsl:apply-templates select="input_type"/>)(inValues[0])); return this.Begin<xsl:value-of select="name"/>(request, callback, asyncState); } private object[] OnEnd<xsl:value-of select="name"/>(Global.System.IAsyncResult result) { <xsl:apply-templates select="output_type"/> retVal = this.End<xsl:value-of select="name"/>(result); return new object[] { retVal}; } private void On<xsl:value-of select="name"/>Completed(object state) { if ((this.<xsl:value-of select="name"/>Completed != null)) { InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); this.<xsl:value-of select="name"/>Completed(this, new <xsl:value-of select="name"/>CompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState)); } } public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request) { this.<xsl:value-of select="name"/>Async(request, null); } public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request, object userState) { if ((this.onBegin<xsl:value-of select="name"/>Delegate == null)) { this.onBegin<xsl:value-of select="name"/>Delegate = new BeginOperationDelegate(this.OnBegin<xsl:value-of select="name"/>); } if ((this.onEnd<xsl:value-of select="name"/>Delegate == null)) { this.onEnd<xsl:value-of select="name"/>Delegate = new EndOperationDelegate(this.OnEnd<xsl:value-of select="name"/>); } if ((this.on<xsl:value-of select="name"/>CompletedDelegate == null)) { this.on<xsl:value-of select="name"/>CompletedDelegate = new Global.System.Threading.SendOrPostCallback(this.On<xsl:value-of select="name"/>Completed); } base.InvokeAsync(this.onBegin<xsl:value-of select="name"/>Delegate, new object[] { request}, this.onEnd<xsl:value-of select="name"/>Delegate, this.on<xsl:value-of select="name"/>CompletedDelegate, userState); } </xsl:if> </xsl:template> <xsl:template name="escapeKeyword"><xsl:param name="value"/><xsl:choose> <xsl:when test="contains($keywordsUpper,concat('|',translate($value, $alpha, $ALPHA),'|'))">[<xsl:value-of select="$value"/>]</xsl:when> <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise> </xsl:choose></xsl:template> <xsl:variable name="keywords">|AddHandler|AddressOf|Alias|And|AndAlso|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDec|CDbl|Char|CInt|Class|CLng|CObj|Const|Continue|CSByte|CShort|CSng|CStr|CType|CUInt|CULng|CUShort|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|False|Finally|For|Friend|Function|Get|GetType|GetXMLNamespace|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|Narrowing|New|Next|Not|Nothing|NotInheritable|NotOverridable|Object|Of|On|Operator|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|REM|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|True|Try|TryCast|TypeOf|Variant|Wend|UInteger|ULong|UShort|Using|When|While|Widening|With|WithEvents|WriteOnly|Xor|</xsl:variable> <xsl:variable name="keywordsUpper" select="translate($keywords, $alpha, $ALPHA)"/> </xsl:stylesheet>