public override void WriteClassSyntax (XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) return; string name = reflection.Evaluate(apiNameExpression).ToString(); bool isAbstract = (bool) reflection.Evaluate(apiIsAbstractTypeExpression); bool isSealed = (bool) reflection.Evaluate(apiIsSealedTypeExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); if (isSealed) { writer.WriteKeyword("final"); writer.WriteString(" "); } else if (isAbstract) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } writer.WriteKeyword("class"); writer.WriteString(" "); writer.WriteIdentifier(name); XPathNavigator baseClass = reflection.SelectSingleNode(apiBaseClassExpression); if ((baseClass != null) && !((bool) baseClass.Evaluate(typeIsObjectExpression))) { writer.WriteString(" "); writer.WriteKeyword("extends"); writer.WriteString(" "); WriteTypeReference(baseClass, writer); } WriteImplementedInterfaces(reflection, writer); }
// class: done public override void WriteClassSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); bool isAbstract = (bool) reflection.Evaluate(apiIsAbstractTypeExpression); bool isSealed = (bool) reflection.Evaluate(apiIsSealedTypeExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); if (isAbstract) { if (isSealed) { // static -- VB doesn't really handle this case writer.WriteKeyword("NotInheritable"); writer.WriteString(" "); } else { writer.WriteKeyword("MustInherit"); writer.WriteString(" "); } } else if (isSealed) { writer.WriteKeyword("NotInheritable"); writer.WriteString(" "); } writer.WriteKeyword("Class"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer); WriteBaseClass(reflection, writer); WriteImplementedInterfaces(reflection, writer); }
public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedUnsafe(reflection, writer)) { return; } if (IsUnsupportedGeneric(reflection, writer)) { return; } if (IsUnsupportedExplicit(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator returnType = reflection.SelectSingleNode(apiReturnTypeExpression); WriteAttributeList(reflection, writer); WriteProcedureModifiers(reflection, writer); writer.WriteKeyword("function"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteParameterList(reflection, writer); if (returnType != null) { writer.WriteString(" : "); WriteTypeReference(returnType, writer); } }
private void WriteExtensionMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator returnType = reflection.SelectSingleNode(apiReturnTypeExpression); XPathNodeIterator parameters = reflection.Select(apiParametersExpression); // extract the first parameter as the extension type parameters.MoveNext(); XPathNavigator extendedType = parameters.Current.SelectSingleNode(parameterTypeExpression); string extendedTypeName = (string)parameters.Current.Evaluate(parameterNameExpression); // write the declarations ParameterDeclaration(extendedTypeName, extendedType, writer); WriteParameterDeclarations(parameters.Clone(), writer); if (returnType != null) { ParameterDeclaration("returnValue", returnType, writer); } writer.WriteLine(); // write the method invocation if (returnType != null) { writer.WriteParameter("returnValue"); writer.WriteString(" = "); } writer.WriteParameter(extendedTypeName); writer.WriteString("."); writer.WriteIdentifier(name); writer.WriteString("("); WriteParameters(parameters.Clone(), writer); writer.WriteString(")"); }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); bool isExplicit = (bool)reflection.Evaluate(apiIsExplicitImplementationExpression); WriteAttributes(reflection, writer); if (!isExplicit) { WriteProcedureModifiers(reflection, writer); } writer.WriteString("event"); writer.WriteString(" "); WriteTypeReference(handler, writer); writer.WriteString(" "); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); //string id = (string) member.GetAttribute("api", String.Empty); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); WriteTypeReference(contract, writer); writer.WriteString("."); WriteMemberReference(member, writer); //writer.WriteReferenceLink(id); // writer.WriteIdentifier(memberName); } else { writer.WriteIdentifier(name); } }
public override void WriteNamespaceSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); writer.WriteKeyword("package"); writer.WriteString(" "); writer.WriteIdentifier(name); }
/// <inheritdoc /> public override void WriteAttachedPropertySyntax(XPathNavigator reflection, SyntaxWriter writer) { string propertyName = (string)reflection.Evaluate(apiNameExpression); string containingTypeName = (string)reflection.Evaluate(apiContainingTypeNameExpression); bool isSettable = (bool)reflection.Evaluate(apiIsWritePropertyExpression); XPathNavigator returnType = reflection.SelectSingleNode(apiReturnTypeExpression); if (!isSettable) { WriteXamlBoilerplate(XamlBoilerplateID.propertyXamlSyntax_readOnly, writer); } else { // xaml syntax block for attached property string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlAttributeUsageHeading); writer.WriteStartSubBlock(xamlBlockId); writer.WriteString("<"); writer.WriteParameter("object "); writer.WriteIdentifier(containingTypeName + "." + propertyName); writer.WriteString("=\""); WriteTypeReference(returnType, writer); writer.WriteString("\" .../>"); writer.WriteEndSubBlock(); } }
// normal method: done public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isExplicit = (bool)reflection.Evaluate(apiIsExplicitImplementationExpression); WriteAttributes(reflection, writer); if (!isExplicit) { WriteProcedureModifiers(reflection, writer); } WriteReturnValue(reflection, writer); writer.WriteString(" "); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); //string memberName = (string) member.Evaluate(nameExpression); //string id = member.GetAttribute("api", String.Empty); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); WriteTypeReference(contract, writer); writer.WriteString("."); WriteMemberReference(member, writer); //writer.WriteReferenceLink(id); } else { writer.WriteIdentifier(name); } WriteGenericTemplates(reflection, writer); WriteMethodParameters(reflection, writer); WriteGenericTemplateConstraints(reflection, writer); }
/// <inheritdoc /> public override void WriteDelegateSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedUnsafe(reflection, writer)) { return; } if (IsUnsupportedGeneric(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); writer.WriteString("/** @delegate */"); writer.WriteLine(); if (isSerializable) { WriteAttribute("T:System.SerializableAttribute", writer); } WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("delegate"); writer.WriteString(" "); WriteReturnValue(reflection, writer); writer.WriteString(" "); writer.WriteIdentifier(name); WriteMethodParameters(reflection, writer); }
/// <inheritdoc /> public override void WriteStructureSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) { WriteAttribute("T:System.SerializableAttribute", writer); } WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("final"); writer.WriteString(" "); writer.WriteKeyword("class"); writer.WriteString(" "); writer.WriteIdentifier(name); writer.WriteString(" "); writer.WriteKeyword("extends"); writer.WriteString(" "); writer.WriteReferenceLink("T:System.ValueType"); WriteImplementedInterfaces(reflection, writer); }
public override void WriteDelegateSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) { WriteAttribute("T:System.SerializableAttribute", writer); } WriteAttributes(reflection, writer); writer.WriteKeyword("type"); writer.WriteString(" "); writer.WriteIdentifier(name); writer.WriteString(" = "); writer.WriteLine(); writer.WriteString(" "); writer.WriteKeyword("delegate"); writer.WriteString(" "); writer.WriteKeyword("of"); writer.WriteString(" "); WriteParameters(reflection, writer); writer.WriteKeyword("->"); writer.WriteString(" "); WriteReturnValue(reflection, writer); }
public override void WriteDelegateSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); writer.WriteKeyword("type"); writer.WriteString(" "); writer.WriteIdentifier(name); writer.WriteString(" = "); writer.WriteLine(); writer.WriteString(" "); writer.WriteKeyword("delegate"); writer.WriteString(" "); writer.WriteKeyword("of"); writer.WriteString(" "); WriteParameters(reflection, writer); writer.WriteKeyword("->"); writer.WriteString(" "); WriteReturnValue(reflection, writer); }
// class: done public override void WriteClassSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = reflection.Evaluate(apiNameExpression).ToString(); bool isAbstract = (bool) reflection.Evaluate(apiIsAbstractTypeExpression); bool isSealed = (bool) reflection.Evaluate(apiIsSealedTypeExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); if (isAbstract) { if (isSealed) { writer.WriteKeyword("static"); } else { writer.WriteKeyword("abstract"); } writer.WriteString(" "); } else { if (isSealed) { writer.WriteKeyword("sealed"); writer.WriteString(" "); } } writer.WriteKeyword("class"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer); WriteBaseClassAndImplementedInterfaces(reflection, writer); WriteGenericTemplateConstraints(reflection, writer); }
/// <summary> /// Write out interface syntax /// </summary> /// <param name="reflection">The reflection information</param> /// <param name="writer">The syntax writer to which it is written</param> public override void WriteInterfaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (!this.IsUnsupported(reflection, writer)) { string identifier = ReadFullTypeName(reflection); writer.WriteIdentifier(identifier); writer.WriteString(" = "); writer.WriteKeyword("function"); writer.WriteString("();"); writer.WriteLine(); writer.WriteIdentifier(identifier); writer.WriteString(".createInterface('"); writer.WriteIdentifier(identifier); writer.WriteString("');"); } }
/// <inheritdoc /> public override void WriteNamespaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); writer.WriteKeyword("Imports"); writer.WriteString(" "); writer.WriteIdentifier(name); }
/// <summary> /// Write out namespace syntax /// </summary> /// <param name="reflection">The reflection information</param> /// <param name="writer">The syntax writer to which it is written</param> public override void WriteNamespaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { string identifier = reflection.Evaluate(SyntaxGeneratorTemplate.apiNameExpression).ToString(); writer.WriteString("Type.createNamespace('"); writer.WriteIdentifier(identifier); writer.WriteString("');"); }
public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedVarargs(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); bool isOverride = (bool)reflection.Evaluate(apiIsOverrideExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); bool isVirtual = (bool)reflection.Evaluate(apiIsVirtualExpression) && !(bool)reflection.Evaluate(apiIsAbstractProcedureExpression); int iterations = isVirtual ? 2 : 1; for (int i = 0; i < iterations; i++) { WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); writer.WriteString(" "); } if (isVirtual) { if (i == 0) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } else { writer.WriteKeyword("override"); writer.WriteString(" "); } } else { WriteMemberKeyword(reflection, writer); } writer.WriteIdentifier(name); writer.WriteString(" : "); WriteParameters(reflection, writer); writer.WriteKeyword("->"); writer.WriteString(" "); WriteReturnValue(reflection, writer); writer.WriteString(" "); WriteGenericTemplateConstraints(reflection, writer); if (i == 0) { writer.WriteLine(); } } }
/// <summary> /// Write out enumeration syntax /// </summary> /// <param name="reflection">The reflection information</param> /// <param name="writer">The syntax writer to which it is written</param> public override void WriteEnumerationSyntax(XPathNavigator reflection, SyntaxWriter writer) { string identifier = ReadFullTypeName(reflection); writer.WriteIdentifier(identifier); writer.WriteString(" = "); writer.WriteKeyword("function"); writer.WriteString("();"); writer.WriteLine(); writer.WriteIdentifier(identifier); writer.WriteString(".createEnum('"); writer.WriteIdentifier(identifier); writer.WriteString("', "); writer.WriteString(HasAttribute(reflection, "System.FlagsAttribute") ? "true" : "false"); writer.WriteString(");"); }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string eventName = (string)reflection.Evaluate(apiNameExpression); string eventVisibility = (string)reflection.Evaluate(apiVisibilityExpression); bool isAbstract = (bool)reflection.Evaluate(apiIsAbstractProcedureExpression); XPathNavigator eventHandler = reflection.SelectSingleNode(apiHandlerOfEventExpression); XPathNavigator containingType = reflection.SelectSingleNode(apiContainingTypeExpression); string containingTypeSubgroup = (string)containingType.Evaluate(apiSubgroupExpression); bool containingTypeIsAbstract = (bool)containingType.Evaluate(apiIsAbstractTypeExpression); bool containingTypeIsSealed = (bool)containingType.Evaluate(apiIsSealedTypeExpression); if (containingTypeSubgroup == "interface") { WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_noXamlSyntaxForInterfaceMembers, writer); } else if (containingTypeIsAbstract && containingTypeIsSealed) { // the event's containing type is static if it's abstract and sealed // members of a static class cannot be used in XAML. WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_nonXamlParent, writer); } else if (IsExcludedSubClass(containingType)) { WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_parentIsExcludedSubClass, writer); } else if (!DoesParentSupportXaml(reflection)) { WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_nonXamlParent, writer); } else if (eventVisibility != "public") { WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_notPublic, writer); } else if (isAbstract) { WriteXamlBoilerplate(XamlBoilerplateID.eventXamlSyntax_abstract, writer); } else { // start the syntax block string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlAttributeUsageHeading); writer.WriteStartSubBlock(xamlBlockId); // syntax looks like: // <object eventName="eventHandlerLink" .../> writer.WriteString("<"); writer.WriteParameter("object"); writer.WriteString(" "); writer.WriteIdentifier(eventName); writer.WriteString("=\""); WriteTypeReference(eventHandler, writer); writer.WriteString("\" .../>"); writer.WriteEndSubBlock(); } }
public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator type = reflection.SelectSingleNode(apiReturnTypeExpression); bool isExplicit = (bool)reflection.Evaluate(apiIsExplicitImplementationExpression); WriteAttributes(reflection, writer); WriteProcedureModifiers(reflection, writer); if (type == null) { writer.WriteKeyword("Sub"); } else { writer.WriteKeyword("Function"); } writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer); WriteParameters(reflection, writer); if (type != null) { writer.WriteString(" "); writer.WriteKeyword("As"); writer.WriteString(" "); WriteTypeReference(type, writer); } if (isExplicit) { if (writer.Position > maxPosition) { writer.WriteLine(); writer.WriteString("\t"); } else { writer.WriteString(" "); } writer.WriteKeyword("Implements"); writer.WriteString(" "); XPathNodeIterator implementations = reflection.Select(apiImplementedMembersExpression); while (implementations.MoveNext()) { XPathNavigator implementation = implementations.Current; XPathNavigator contract = implementation.SelectSingleNode(attributeTypeExpression); // string id = implementation.GetAttribute("api", String.Empty); if (implementations.CurrentPosition > 1) { writer.WriteString(", "); } WriteTypeReference(contract, writer); writer.WriteString("."); WriteMemberReference(implementation, writer); } } }
/// <summary> /// Write out field syntax /// </summary> /// <param name="reflection">The reflection information</param> /// <param name="writer">The syntax writer to which it is written</param> public override void WriteFieldSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (!this.IsUnsupported(reflection, writer)) { string identifier = ReadMemberName(reflection); // EFW - Added "var" keyword before field name writer.WriteKeyword("var"); writer.WriteString(" "); if ((bool)reflection.Evaluate(SyntaxGeneratorTemplate.apiIsStaticExpression)) { writer.WriteIdentifier(ReadFullContainingTypeName(reflection)); writer.WriteString("."); } writer.WriteIdentifier(identifier); } }
public override void WriteFieldSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupported(reflection, writer)) { return; } string memberName = ReadMemberName(reflection); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); if (isStatic) { string typeName = ReadFullContainingTypeName(reflection); writer.WriteIdentifier(typeName); writer.WriteString("."); } writer.WriteIdentifier(memberName); }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); XPathNavigator args = reflection.SelectSingleNode(apiEventArgsExpression); bool isVirtual = (bool)reflection.Evaluate(apiIsVirtualExpression) && !(bool)reflection.Evaluate(apiIsAbstractProcedureExpression); int iterations = isVirtual ? 2 : 1; for (int i = 0; i < iterations; i++) { WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); if (isVirtual) { if (i == 0) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } else { writer.WriteKeyword("override"); writer.WriteString(" "); } } else { WriteMemberKeyword(reflection, writer); } writer.WriteIdentifier(name); writer.WriteString(" : "); writer.WriteReferenceLink("T:Microsoft.FSharp.Control.IEvent"); writer.WriteString("<"); WriteTypeReference(handler, writer); writer.WriteString(","); writer.WriteLine(); writer.WriteString(" "); if (args == null) { writer.WriteReferenceLink("T:System.EventArgs"); } else { WriteTypeReference(args, writer); } writer.WriteString(">"); if (i == 0) { writer.WriteLine(); } } }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedUnsafe(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); writer.WriteString("/** @event */"); writer.WriteLine(); // add_ method declaration WriteAttributes(reflection, writer); WriteProcedureModifiers(reflection, writer); WriteReturnValue(reflection, writer); writer.WriteString(" "); writer.WriteIdentifier("add_" + name); writer.WriteString(" ("); WriteTypeReference(handler, writer); writer.WriteString(" "); writer.WriteParameter("value"); writer.WriteString(")"); writer.WriteLine(); writer.WriteString("/** @event */"); writer.WriteLine(); // remove_ method declaration WriteAttributes(reflection, writer); WriteProcedureModifiers(reflection, writer); WriteReturnValue(reflection, writer); writer.WriteString(" "); writer.WriteIdentifier("remove_" + name); writer.WriteString(" ("); WriteTypeReference(handler, writer); writer.WriteString(" "); writer.WriteParameter("value"); writer.WriteString(")"); writer.WriteLine(); }
// A grandiose Property Element Usage block // syntax looks like: // <object> // <object.PropertyName> // <linkToType .../> // </object.PropertyName> // </object> private void PropertyElementUsageGrande(XPathNavigator propertyReflection, SyntaxWriter writer) { string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlPropertyElementUsageHeading); string propertyName = (string)propertyReflection.Evaluate(apiNameExpression); XPathNavigator returnType = propertyReflection.SelectSingleNode(apiReturnTypeExpression); // start the syntax block writer.WriteStartSubBlock(xamlBlockId); // <object> writer.WriteString("<"); writer.WriteParameter("object"); writer.WriteString(">"); writer.WriteLine(); // <object.PropertyName> writer.WriteString(" <"); writer.WriteParameter("object"); writer.WriteString("."); writer.WriteIdentifier(propertyName); writer.WriteString(">"); writer.WriteLine(); // <linkToType .../> writer.WriteString(" <"); WriteTypeReference(returnType, writer); writer.WriteString(" .../>"); writer.WriteLine(); // </object.PropertyName> writer.WriteString(" </"); writer.WriteParameter("object"); writer.WriteString("."); writer.WriteIdentifier(propertyName); writer.WriteString(">"); writer.WriteLine(); // </object> writer.WriteString("</"); writer.WriteParameter("object"); writer.WriteString(">"); writer.WriteEndSubBlock(); }
// interface: done public override void WriteInterfaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("Interface"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer, true); // Need to write variance info for interfaces and delegates WriteImplementedInterfaces(reflection, writer); }
public override void WriteConstructorSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiContainingTypeNameExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); WriteAttributes(reflection, writer); writer.WriteKeyword("new"); writer.WriteString(" : "); WriteParameters(reflection, writer); writer.WriteKeyword("->"); writer.WriteString(" "); writer.WriteIdentifier(name); }
private void TypeDeclaration (XPathNavigator reflection, SyntaxWriter writer, bool writeVariance) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator declaringType = reflection.SelectSingleNode(apiContainingTypeExpression); writer.WriteKeyword("Dim"); writer.WriteString(" "); writer.WriteParameter("instance"); writer.WriteString(" "); writer.WriteKeyword("As"); writer.WriteString(" "); if (declaringType != null) { WriteTypeReference(declaringType, writer); writer.WriteString("."); } if (reservedWords.ContainsKey(name)) { writer.WriteString("["); writer.WriteIdentifier(name); writer.WriteString("]"); } else { writer.WriteIdentifier(name); } WriteGenericTemplates(reflection, writer, writeVariance); }
// structure: add base type public override void WriteStructureSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("Structure"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer); WriteImplementedInterfaces(reflection, writer); }
/// <summary> /// Write out normal method syntax /// </summary> /// <param name="reflection">The reflection information</param> /// <param name="writer">The syntax writer to which it is written</param> public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (this.IsUnsupported(reflection, writer)) { return; } if (HasAttribute(reflection, "System.AttachedPropertyAttribute")) { this.WriteAttachedPropertySyntax(reflection, writer); return; } string identifier = ReadMemberName(reflection); bool isStatic = (bool)reflection.Evaluate(SyntaxGeneratorTemplate.apiIsStaticExpression); bool isGlobal = (bool)reflection.Evaluate(memberIsGlobalExpression); if (isStatic && !isGlobal) { writer.WriteIdentifier(ReadFullContainingTypeName(reflection)); writer.WriteString("."); writer.WriteIdentifier(identifier); writer.WriteString(" = "); writer.WriteKeyword("function"); } else { writer.WriteKeyword("function"); writer.WriteString(" "); writer.WriteIdentifier(identifier); } WriteParameterList(reflection, writer); writer.WriteString(";"); }
public override void WriteInterfaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); WriteAttributes(reflection, writer); WriteGenericTemplates(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("interface class"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteImplementedInterfaces(reflection, writer); }
public override void WriteEnumerationSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) { WriteAttribute("T:System.SerializableAttribute", writer); } WriteAttributes(reflection, writer); writer.WriteKeyword("type"); writer.WriteString(" "); WriteVisibility(reflection, writer); writer.WriteIdentifier(name); }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); WriteAttributes(reflection, writer); WriteProcedureModifiers(reflection, writer); writer.WriteString("Event"); writer.WriteString(" "); writer.WriteIdentifier(name); writer.WriteString(" "); writer.WriteKeyword("As"); writer.WriteString(" "); WriteTypeReference(handler, writer); WriteExplicitImplementations(reflection, writer); }
public override void WriteClassSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) { return; } string name = reflection.Evaluate(apiNameExpression).ToString(); bool isAbstract = (bool)reflection.Evaluate(apiIsAbstractTypeExpression); bool isSealed = (bool)reflection.Evaluate(apiIsSealedTypeExpression); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) { WriteAttribute("T:System.SerializableAttribute", writer); } WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); if (isSealed) { writer.WriteKeyword("final"); writer.WriteString(" "); } else if (isAbstract) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } writer.WriteKeyword("class"); writer.WriteString(" "); writer.WriteIdentifier(name); XPathNavigator baseClass = reflection.SelectSingleNode(apiBaseClassExpression); XPathExpression typeIsObjectExpr = this.GetIsObjectExpression(); if ((baseClass != null) && !((bool)baseClass.Evaluate(typeIsObjectExpr))) { writer.WriteString(" "); writer.WriteKeyword("extends"); writer.WriteString(" "); WriteTypeReference(baseClass, writer); } WriteImplementedInterfaces(reflection, writer); }
public override void WriteInterfaceSyntax(XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) { return; } string name = (string)reflection.Evaluate(apiNameExpression); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("interface"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteImplementedInterfaces("extends", reflection, writer); }
// what about generic methods? private void WriteMemberName(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isExplicit = (bool)reflection.Evaluate(apiIsExplicitImplementationExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); bool isFamily = (bool)reflection.Evaluate(apiIsFamilyMemberExpression); bool isDefault = (bool)reflection.Evaluate(apiIsDefaultMemberExpression); XPathNavigator declaringType = reflection.SelectSingleNode(apiContainingTypeExpression); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); writer.WriteKeyword("CType"); writer.WriteString("("); writer.WriteParameter("instance"); writer.WriteString(", "); WriteTypeReference(contract, writer); writer.WriteString(")."); WriteMemberReference(member, writer); } else { if (isStatic) { WriteTypeReference(declaringType, writer); } else { if (isFamily) { writer.WriteKeyword("Me"); } else { writer.WriteString("instance"); } } if (!isDefault) { writer.WriteString("."); writer.WriteIdentifier(name); } } }
// constructor: done public override void WriteConstructorSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiContainingTypeNameExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); WriteAttributes(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); } else { WriteVisibility(reflection, writer); } writer.WriteString(" "); writer.WriteIdentifier(name); WriteMethodParameters(reflection, writer); }
public override void WriteStructureSyntax (XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) return; string name = (string) reflection.Evaluate(apiNameExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("final"); writer.WriteString(" "); writer.WriteKeyword("class"); writer.WriteString(" "); writer.WriteIdentifier(name); writer.WriteString(" "); writer.WriteKeyword("extends"); writer.WriteString(" "); writer.WriteReferenceLink("T:System.ValueType"); WriteImplementedInterfaces(reflection, writer); }
public override void WriteAttachedEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string eventName = (string)reflection.Evaluate(apiNameExpression); string containingTypeName = (string)reflection.Evaluate(apiContainingTypeNameExpression); XPathNavigator eventHandler = reflection.SelectSingleNode(apiHandlerOfEventExpression); // xaml syntax block for attached event string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlAttributeUsageHeading); writer.WriteStartSubBlock(xamlBlockId); writer.WriteString("<"); writer.WriteParameter("object"); writer.WriteString(" "); writer.WriteIdentifier(containingTypeName + "." + eventName); writer.WriteString("=\""); WriteTypeReference(eventHandler, writer); writer.WriteString(string.Format("\" .../>")); writer.WriteEndSubBlock(); }
public override void WriteEventSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); bool isExplicit = (bool) reflection.Evaluate(apiIsExplicitImplementationExpression); WriteAttributes(reflection, writer); if (!isExplicit) WriteProcedureModifiers(reflection, writer); writer.WriteString("event"); writer.WriteString(" "); WriteTypeReference(handler, writer); writer.WriteString(" "); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); //string id = (string) member.GetAttribute("api", String.Empty); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); WriteTypeReference(contract, writer); writer.WriteString("."); WriteMemberReference(member, writer); //writer.WriteReferenceLink(id); // writer.WriteIdentifier(memberName); } else { writer.WriteIdentifier(name); } }
public override void WriteFieldSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); bool isLiteral = (bool)reflection.Evaluate(apiIsLiteralFieldExpression); bool isInitOnly = (bool)reflection.Evaluate(apiIsInitOnlyFieldExpression); bool isSerialized = (bool)reflection.Evaluate(apiIsSerializedFieldExpression); if (!isSerialized) WriteAttribute("T:System.NonSerializedAttribute", writer); WriteAttributes(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); writer.WriteString(" "); } writer.WriteKeyword("val"); writer.WriteString(" "); if (!isInitOnly) { writer.WriteKeyword("mutable"); writer.WriteString(" "); } WriteVisibility(reflection, writer); writer.WriteIdentifier(name); writer.WriteString(": "); WriteReturnValue(reflection, writer); }
// DONE public override void WritePropertySyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isGettable = (bool)reflection.Evaluate(apiIsReadPropertyExpression); bool isSettable = (bool)reflection.Evaluate(apiIsWritePropertyExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); bool isVirtual = (bool)reflection.Evaluate(apiIsVirtualExpression) && !(bool)reflection.Evaluate(apiIsAbstractProcedureExpression); int iterations = isVirtual ? 2 : 1; for (int i = 0; i < iterations; i++) { WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); writer.WriteString(" "); } if (isVirtual) if (i == 0) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } else { writer.WriteKeyword("override"); writer.WriteString(" "); } else { WriteMemberKeyword(reflection, writer); } writer.WriteIdentifier(name); writer.WriteString(" : "); WriteReturnValue(reflection, writer); if (isSettable) { writer.WriteString(" "); writer.WriteKeyword("with"); writer.WriteString(" "); string getVisibility = (string)reflection.Evaluate(apiGetVisibilityExpression); if (!String.IsNullOrEmpty(getVisibility)) { WriteVisibility(getVisibility, writer); } writer.WriteKeyword("get"); writer.WriteString(", "); string setVisibility = (string)reflection.Evaluate(apiSetVisibilityExpression); if (!String.IsNullOrEmpty(setVisibility)) { WriteVisibility(setVisibility, writer); } writer.WriteKeyword("set"); } if (i == 0) writer.WriteLine(); } }
public override void WriteNormalMethodSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isOverride = (bool)reflection.Evaluate(apiIsOverrideExpression); bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); bool isVirtual = (bool)reflection.Evaluate(apiIsVirtualExpression) && !(bool)reflection.Evaluate(apiIsAbstractProcedureExpression); int iterations = isVirtual ? 2 : 1; for (int i = 0; i < iterations; i++) { WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); writer.WriteString(" "); } if (isVirtual) if (i == 0) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } else { writer.WriteKeyword("override"); writer.WriteString(" "); } else { WriteMemberKeyword(reflection, writer); } writer.WriteIdentifier(name); writer.WriteString(" : "); WriteParameters(reflection, writer); writer.WriteKeyword("->"); writer.WriteString(" "); WriteReturnValue(reflection, writer); writer.WriteString(" "); WriteGenericTemplateConstraints(reflection, writer); if (i == 0) writer.WriteLine(); } }
// delegate: done public override void WriteDelegateSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("delegate"); writer.WriteString(" "); WriteReturnValue(reflection, writer); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer, true); // delegates need co/contravariance info WriteMethodParameters(reflection, writer); WriteGenericTemplateConstraints(reflection, writer); }
// enumeration: still need to handle non-standard base public override void WriteEnumerationSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); bool isSerializable = (bool) reflection.Evaluate(apiIsSerializableTypeExpression); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("enum"); writer.WriteString(" "); writer.WriteIdentifier(name); }
// constructor: done public override void WriteConstructorSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiContainingTypeNameExpression); bool isStatic = (bool) reflection.Evaluate(apiIsStaticExpression); WriteAttributes(reflection, writer); if (isStatic) { writer.WriteKeyword("static"); } else { WriteVisibility(reflection, writer); } writer.WriteString(" "); writer.WriteIdentifier(name); WriteMethodParameters(reflection, writer); }
// normal method: done public override void WriteNormalMethodSyntax (XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedVarargs(reflection, writer)) return; string name = (string) reflection.Evaluate(apiNameExpression); bool isExplicit = (bool) reflection.Evaluate(apiIsExplicitImplementationExpression); WriteAttributes(reflection, writer); if (!isExplicit) WriteProcedureModifiers(reflection, writer); WriteReturnValue(reflection, writer); writer.WriteString(" "); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); //string memberName = (string) member.Evaluate(nameExpression); //string id = member.GetAttribute("api", String.Empty); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); WriteTypeReference(contract, writer); writer.WriteString("."); WriteMemberReference(member, writer); //writer.WriteReferenceLink(id); } else { writer.WriteIdentifier(name); } WriteGenericTemplates(reflection, writer); WriteMethodParameters(reflection, writer); WriteGenericTemplateConstraints(reflection, writer); }
// operator: done public override void WriteOperatorSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); string identifier = null; bool evalulate = (bool)reflection.Evaluate(apiIsUdtReturnExpression); if (!(bool)reflection.Evaluate(apiIsUdtReturnExpression)) { switch (name) { // unary math operators case "UnaryPlus": identifier = "+"; break; case "UnaryNegation": identifier = "-"; break; case "Increment": identifier = "++"; break; case "Decrement": identifier = "--"; break; // unary logical operators case "LogicalNot": identifier = "!"; break; case "True": identifier = "true"; break; case "False": identifier = "false"; break; // binary comparison operators case "Equality": identifier = "=="; break; case "Inequality": identifier = "!="; break; case "LessThan": identifier = "<"; break; case "GreaterThan": identifier = ">"; break; case "LessThanOrEqual": identifier = "<="; break; case "GreaterThanOrEqual": identifier = ">="; break; // binary math operators case "Addition": identifier = "+"; break; case "Subtraction": identifier = "-"; break; case "Multiply": identifier = "*"; break; case "Division": identifier = "/"; break; case "Modulus": identifier = "%"; break; // binary logical operators case "BitwiseAnd": identifier = "&"; break; case "BitwiseOr": identifier = "|"; break; case "ExclusiveOr": identifier = "^"; break; // bit-array operators case "OnesComplement": identifier = "~"; break; case "LeftShift": identifier = "<<"; break; case "RightShift": identifier = ">>"; break; case "Assign": identifier = "="; break; // unrecognized operator default: identifier = null; break; } } if (identifier == null) { writer.WriteMessage("UnsupportedOperator_" + Language); } else { WriteProcedureModifiers(reflection, writer); WriteReturnValue(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("operator"); writer.WriteString(" "); writer.WriteIdentifier(identifier); WriteMethodParameters(reflection, writer); } }
public override void WritePropertySyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); bool isDefault = (bool)reflection.Evaluate(apiIsDefaultMemberExpression); bool isGettable = (bool)reflection.Evaluate(apiIsReadPropertyExpression); bool isSettable = (bool)reflection.Evaluate(apiIsWritePropertyExpression); bool isExplicit = (bool)reflection.Evaluate(apiIsExplicitImplementationExpression); XPathNodeIterator parameters = reflection.Select(apiParametersExpression); WriteAttributes(reflection, writer); if (!isExplicit) WriteProcedureModifiers(reflection, writer); WriteReturnValue(reflection, writer); writer.WriteString(" "); if (isExplicit) { XPathNavigator member = reflection.SelectSingleNode(apiImplementedMembersExpression); XPathNavigator contract = member.SelectSingleNode(memberDeclaringTypeExpression); WriteTypeReference(contract, writer); writer.WriteString("."); if (parameters.Count > 0) { // In C#, EII property with parameters is an indexer; use 'this' instead of the property's name writer.WriteKeyword("this"); } else { WriteMemberReference(member, writer); } } else { // In C#, any property with parameters is an indexer, which is declared using 'this' instead of the property's name if (isDefault || parameters.Count > 0) { writer.WriteKeyword("this"); } else { writer.WriteIdentifier(name); } } WritePropertyParameters(reflection, writer); writer.WriteString(" {"); if (isGettable) { writer.WriteString(" "); string getVisibility = (string)reflection.Evaluate(apiGetVisibilityExpression); if (!String.IsNullOrEmpty(getVisibility)) { WriteVisibility(getVisibility, writer); writer.WriteString(" "); } writer.WriteKeyword("get"); writer.WriteString(";"); } if (isSettable) { writer.WriteString(" "); string setVisibility = (string)reflection.Evaluate(apiSetVisibilityExpression); if (!String.IsNullOrEmpty(setVisibility)) { WriteVisibility(setVisibility, writer); writer.WriteString(" "); } writer.WriteKeyword("set"); writer.WriteString(";"); } writer.WriteString(" }"); }
public override void WriteInterfaceSyntax (XPathNavigator reflection, SyntaxWriter writer) { if (IsUnsupportedGeneric(reflection, writer)) return; string name = (string) reflection.Evaluate(apiNameExpression); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("interface"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteImplementedInterfaces("extends", reflection, writer); }
private void ObjectElementUsageForClassStruct(XPathNavigator reflection, SyntaxWriter writer) { string typeName = (string)reflection.Evaluate(apiNameExpression); bool isGeneric = (bool)reflection.Evaluate(apiIsGenericExpression); string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlObjectElementUsageHeading); string contentPropertyId = (string)reflection.Evaluate(contentPropertyIdExpression); if (contentPropertyId == "") contentPropertyId = (string)reflection.Evaluate(ancestorContentPropertyIdExpression); // start the syntax block writer.WriteStartSubBlock(xamlBlockId); writer.WriteString("<"); if (isGeneric) { writer.WriteIdentifier(typeName); // for generic types show the type arguments XPathNodeIterator templates = (XPathNodeIterator)reflection.Evaluate(apiTemplatesExpression); if (templates.Count > 0) { writer.WriteString(" x:TypeArguments=\""); while (templates.MoveNext()) { XPathNavigator template = templates.Current; string name = template.GetAttribute("name", String.Empty); writer.WriteString(name); if (templates.CurrentPosition < templates.Count) writer.WriteString(","); } writer.WriteString("\""); } } else { // for non-generic types just show the name writer.WriteIdentifier(typeName); } if (contentPropertyId == string.Empty) { writer.WriteString(" .../>"); } else { // close the start tag writer.WriteString(">"); // the inner xml of the Object Element syntax for a type with a content property // is a link to the content property writer.WriteLine(); writer.WriteString(" "); writer.WriteReferenceLink(contentPropertyId); writer.WriteLine(); // write the end tag writer.WriteString("</"); writer.WriteIdentifier(typeName); writer.WriteString(">"); } // end the sub block writer.WriteEndSubBlock(); }
public override void WriteOperatorSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); string identifier; bool isStatic = (bool)reflection.Evaluate(apiIsStaticExpression); switch (name) { // unary math operators case "UnaryPlus": identifier = "+"; break; case "UnaryNegation": identifier = "-"; break; case "Increment": identifier = "++"; break; case "Decrement": identifier = "--"; break; // unary logical operators case "LogicalNot": identifier = "not"; break; case "True": identifier = "true"; break; case "False": identifier = "false"; break; // binary comparison operators case "Equality": identifier = "="; break; case "Inequality": identifier = "<>"; break; case "LessThan": identifier = "<"; break; case "GreaterThan": identifier = ">"; break; case "LessThanOrEqual": identifier = "<="; break; case "GreaterThanOrEqual": identifier = ">="; break; // binary math operators case "Addition": identifier = "+"; break; case "Subtraction": identifier = "-"; break; case "Multiply": identifier = "*"; break; case "Division": identifier = "/"; break; case "Modulus": identifier = "%"; break; // binary logical operators case "BitwiseAnd": identifier = "&&&"; break; case "BitwiseOr": identifier = "|||"; break; case "ExclusiveOr": identifier = "^^^"; break; // bit-array operators case "OnesComplement": identifier = null; // No F# equiv. break; case "LeftShift": identifier = "<<<"; break; case "RightShift": identifier = ">>>"; break; // unrecognized operator default: identifier = null; break; } if (identifier == null) { writer.WriteMessage("UnsupportedOperator_" + Language); } else { if (isStatic) { writer.WriteKeyword("static"); writer.WriteString(" "); } writer.WriteKeyword("let"); writer.WriteString(" "); writer.WriteKeyword("inline"); writer.WriteKeyword(" "); writer.WriteString("("); writer.WriteIdentifier(identifier); writer.WriteString(")"); WriteParameters(reflection, writer); writer.WriteString(" : "); WriteReturnValue(reflection, writer); } }
public override void WriteAttachedPropertySyntax(XPathNavigator reflection, SyntaxWriter writer) { string propertyName = (string)reflection.Evaluate(apiNameExpression); string containingTypeName = (string)reflection.Evaluate(apiContainingTypeNameExpression); bool isSettable = (bool)reflection.Evaluate(apiIsWritePropertyExpression); XPathNavigator returnType = reflection.SelectSingleNode(apiReturnTypeExpression); if (!isSettable) { WriteXamlBoilerplate(XamlBoilerplateID.propertyXamlSyntax_readOnly, writer); } else { // xaml syntax block for attached property string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlAttributeUsageHeading); writer.WriteStartSubBlock(xamlBlockId); writer.WriteString("<"); writer.WriteParameter("object"); writer.WriteString(" "); writer.WriteIdentifier(containingTypeName + "." + propertyName); writer.WriteString("=\""); WriteTypeReference(returnType, writer); writer.WriteString("\" .../>"); writer.WriteEndSubBlock(); } }
public override void WriteEventSyntax(XPathNavigator reflection, SyntaxWriter writer) { string name = (string)reflection.Evaluate(apiNameExpression); XPathNavigator handler = reflection.SelectSingleNode(apiHandlerOfEventExpression); XPathNavigator args = reflection.SelectSingleNode(apiEventArgsExpression); bool isVirtual = (bool)reflection.Evaluate(apiIsVirtualExpression) && !(bool)reflection.Evaluate(apiIsAbstractProcedureExpression); int iterations = isVirtual ? 2 : 1; for (int i = 0; i < iterations; i++) { WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); if (isVirtual) if (i == 0) { writer.WriteKeyword("abstract"); writer.WriteString(" "); } else { writer.WriteKeyword("override"); writer.WriteString(" "); } else { WriteMemberKeyword(reflection, writer); } writer.WriteIdentifier(name); writer.WriteString(" : "); writer.WriteReferenceLink("T:Microsoft.FSharp.Control.IEvent"); writer.WriteString("<"); WriteTypeReference(handler, writer); writer.WriteString(","); writer.WriteLine(); writer.WriteString(" "); if (args == null) { writer.WriteReferenceLink("T:System.EventArgs"); } else { WriteTypeReference(args, writer); } writer.WriteString(">"); if (i == 0) writer.WriteLine(); } }
private void WriteDotNetObject(XPathNavigator reflection, SyntaxWriter writer, string kind) { string name = reflection.Evaluate(apiNameExpression).ToString(); bool isSerializable = (bool)reflection.Evaluate(apiIsSerializableTypeExpression); XPathNodeIterator implements = reflection.Select(apiImplementedInterfacesExpression); XPathNavigator baseClass = reflection.SelectSingleNode(apiBaseClassExpression); bool hasBaseClass = (baseClass != null) && !((bool)baseClass.Evaluate(typeIsObjectExpression)); // CLR considers interfaces abstract. bool isAbstract = (bool)reflection.Evaluate(apiIsAbstractTypeExpression) && kind != "interface"; bool isSealed = (bool)reflection.Evaluate(apiIsSealedTypeExpression); if (isAbstract) WriteAttribute("T:Microsoft.FSharp.Core.AbstractClassAttribute", writer); if (isSealed) WriteAttribute("T:Microsoft.FSharp.Core.SealedAttribute", writer); if (isSerializable) WriteAttribute("T:System.SerializableAttribute", writer); WriteAttributes(reflection, writer); writer.WriteKeyword("type"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer); writer.WriteString(" = "); if (hasBaseClass || implements.Count != 0) { writer.WriteLine(); writer.WriteString(" "); } writer.WriteKeyword(kind); if (hasBaseClass || implements.Count != 0) { writer.WriteLine(); } if (hasBaseClass) { writer.WriteString(" "); writer.WriteKeyword("inherit"); writer.WriteString(" "); WriteTypeReference(baseClass, writer); writer.WriteLine(); } while (implements.MoveNext()) { XPathNavigator implement = implements.Current; writer.WriteString(" "); writer.WriteKeyword("interface"); writer.WriteString(" "); WriteTypeReference(implement, writer); writer.WriteLine(); } if (hasBaseClass || implements.Count != 0) { writer.WriteString(" "); } else { writer.WriteString(" "); } writer.WriteKeyword("end"); }
// An Attribute Usage block private void PropertyAttributeUsage(XPathNavigator propertyReflection, SyntaxWriter writer) { string xamlBlockId = System.Enum.GetName(typeof(XamlHeadingID), XamlHeadingID.xamlAttributeUsageHeading); string propertyName = (string)propertyReflection.Evaluate(apiNameExpression); XPathNavigator returnType = propertyReflection.SelectSingleNode(apiReturnTypeExpression); // start the syntax block writer.WriteStartSubBlock(xamlBlockId); // syntax looks like: // <object PropertyName="linkToType" .../> writer.WriteString("<"); writer.WriteParameter("object"); writer.WriteString(" "); writer.WriteIdentifier(propertyName); writer.WriteString("=\""); WriteTypeReference(returnType, writer); writer.WriteString("\" .../>"); writer.WriteEndSubBlock(); }
// interface: done public override void WriteInterfaceSyntax (XPathNavigator reflection, SyntaxWriter writer) { string name = (string) reflection.Evaluate(apiNameExpression); WriteAttributes(reflection, writer); WriteVisibility(reflection, writer); writer.WriteString(" "); writer.WriteKeyword("interface"); writer.WriteString(" "); writer.WriteIdentifier(name); WriteGenericTemplates(reflection, writer, true); // interfaces need co/contravariance info WriteImplementedInterfaces(reflection, writer); WriteGenericTemplateConstraints(reflection, writer); }