diff options
Diffstat (limited to 'mdoc/Mono.Documentation/Updater')
6 files changed, 43 insertions, 40 deletions
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs index 4f4f287a..37c0da24 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs @@ -517,18 +517,6 @@ namespace Mono.Documentation.Updater.Formatters if (method.IsFinal) modifiers += " sealed"; if (modifiers == " virtual sealed") modifiers = ""; - if ((method.ReturnType.IsRequiredModifier - && ((RequiredModifierType)method.ReturnType).ElementType.IsByReference) - || method.ReturnType.IsByReference) - { - modifiers += " ref"; - } - - if (method.ReturnType.IsRequiredModifier && DocUtils.HasCustomAttribute(method.MethodReturnType, Consts.IsReadOnlyAttribute)) - { - modifiers += " readonly"; - } - switch (method.Name) { case "op_Implicit": @@ -542,6 +530,24 @@ namespace Mono.Documentation.Updater.Formatters return buf.Append (modifiers); } + protected override StringBuilder AppendRefTypeName(StringBuilder buf, ByReferenceType type, IAttributeParserContext context) + { + buf.Append("ref "); + return base.AppendRefTypeName(buf, type, context); + } + + protected override StringBuilder AppendRequiredModifierTypeName( + StringBuilder buf, RequiredModifierType type, IAttributeParserContext context) + { + if (type.ModifierType.FullName == Consts.InAttribute && type.ElementType is ByReferenceType refType) + { + buf.Append("ref readonly "); + return _AppendTypeName(buf, refType.ElementType, context); + } + + return base.AppendRequiredModifierTypeName(buf, type, context); + } + protected override StringBuilder AppendGenericMethod (StringBuilder buf, MethodDefinition method) { if (method.IsGenericMethod ()) @@ -585,19 +591,23 @@ namespace Mono.Documentation.Updater.Formatters private StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter) { - if (parameter.ParameterType is ByReferenceType) + TypeReference parameterType = parameter.ParameterType; + + if (parameterType is ByReferenceType byReferenceType) { if (parameter.IsOut) { buf.Append ("out "); } + else if(parameter.IsIn) + { + buf.Append("in "); + } else { - if (parameter.HasCustomAttributes && parameter.CustomAttributes.Any (ca => ca.AttributeType.Name == "IsReadOnlyAttribute")) - buf.Append ("in "); - else - buf.Append ("ref "); + buf.Append("ref "); } + parameterType = byReferenceType.ElementType; } if (parameter.HasCustomAttributes) @@ -609,7 +619,7 @@ namespace Mono.Documentation.Updater.Formatters var context = AttributeParserContext.Create (parameter); var isNullableType = context.IsNullable (); - buf.Append (GetTypeName (parameter.ParameterType, context)); + buf.Append (GetTypeName (parameterType, context)); buf.Append (GetTypeNullableSymbol (parameter.ParameterType, isNullableType)); buf.Append (" "); buf.Append (parameter.Name); @@ -673,9 +683,6 @@ namespace Mono.Documentation.Updater.Formatters modifiers = ""; buf.Append (modifiers).Append (' '); - if (property.PropertyType.IsByReference) - buf.Append("ref "); - var context = AttributeParserContext.Create (property); var isNullableType = context.IsNullable (); var propertyReturnTypeName = GetTypeName (property.PropertyType, context); diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs index 9bb44003..516c9a93 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs @@ -776,10 +776,9 @@ namespace Mono.Documentation.Updater.Formatters.CppFormatters return buf; } - protected override StringBuilder AppendRefTypeName(StringBuilder buf, TypeReference type, IAttributeParserContext context) + protected override StringBuilder AppendRefTypeName(StringBuilder buf, ByReferenceType type, IAttributeParserContext context) { - TypeSpecification spec = type as TypeSpecification; - _AppendTypeName(buf, spec != null ? spec.ElementType : type.GetElementType(), context); + _AppendTypeName(buf, type.ElementType, context); AppendHat(buf, type); buf.Append(RefTypeModifier); diff --git a/mdoc/Mono.Documentation/Updater/Formatters/FSharpFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/FSharpFormatter.cs index 25b78bf8..f810f1dd 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/FSharpFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/FSharpFormatter.cs @@ -613,10 +613,9 @@ namespace Mono.Documentation.Updater return buf; } - protected override StringBuilder AppendRefTypeName(StringBuilder buf, TypeReference type, IAttributeParserContext context) + protected override StringBuilder AppendRefTypeName(StringBuilder buf, ByReferenceType type, IAttributeParserContext context) { - ByReferenceType reftype = type as ByReferenceType; - return AppendTypeName(buf, reftype?.ElementType, context); + return AppendTypeName(buf, type.ElementType, context); } protected override StringBuilder AppendModifiers(StringBuilder buf, MethodDefinition method) diff --git a/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs index 439d91b5..6e1ca5bd 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs @@ -143,14 +143,14 @@ namespace Mono.Documentation.Updater StringBuilder interimBuilder = new StringBuilder(); - if (ShouldStripModFromTypeName && type is RequiredModifierType) + if (ShouldStripModFromTypeName && type is RequiredModifierType requiredModifierType) { - AppendRequiredModifierTypeName(interimBuilder, type as RequiredModifierType, context); + AppendRequiredModifierTypeName(interimBuilder, requiredModifierType, context); return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection); } - if (ShouldStripModFromTypeName && type is OptionalModifierType) + if (ShouldStripModFromTypeName && type is OptionalModifierType optionalModifierType) { - AppendOptionalModifierTypeName(interimBuilder, type as OptionalModifierType, context); + AppendOptionalModifierTypeName(interimBuilder, optionalModifierType, context); return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection); } if (type is ArrayType) @@ -158,9 +158,9 @@ namespace Mono.Documentation.Updater AppendArrayTypeName(interimBuilder, type, context); return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection); } - if (type is ByReferenceType) + if (type is ByReferenceType byReferenceType) { - AppendRefTypeName (interimBuilder, type, context); + AppendRefTypeName (interimBuilder, byReferenceType, context); return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection); } if (type is PointerType) @@ -290,10 +290,9 @@ namespace Mono.Documentation.Updater get { return "@"; } } - protected virtual StringBuilder AppendRefTypeName (StringBuilder buf, TypeReference type, IAttributeParserContext context) + protected virtual StringBuilder AppendRefTypeName (StringBuilder buf, ByReferenceType type, IAttributeParserContext context) { - TypeSpecification spec = type as TypeSpecification; - return _AppendTypeName(buf, spec != null ? spec.ElementType : type.GetElementType(), context); + return _AppendTypeName(buf, type.ElementType, context); } protected virtual string PointerModifier diff --git a/mdoc/Mono.Documentation/Updater/Formatters/MsxdocSlashDocMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/MsxdocSlashDocMemberFormatter.cs index 8d0beac3..a9b9aa6b 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/MsxdocSlashDocMemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/MsxdocSlashDocMemberFormatter.cs @@ -7,10 +7,9 @@ namespace Mono.Documentation.Updater {
public MsxdocSlashDocMemberFormatter(TypeMap map) : base(map) { }
- protected override StringBuilder AppendRefTypeName(StringBuilder buf, TypeReference type, IAttributeParserContext context)
+ protected override StringBuilder AppendRefTypeName(StringBuilder buf, ByReferenceType type, IAttributeParserContext context)
{
- TypeSpecification spec = type as TypeSpecification;
- return _AppendTypeName(buf, spec != null ? spec.ElementType : type.GetElementType(), context).Append(RefTypeModifier);
+ return _AppendTypeName(buf, type.ElementType, context).Append(RefTypeModifier);
}
}
}
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs index 2a5dfa51..26b2024d 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs @@ -82,7 +82,7 @@ namespace Mono.Documentation.Updater return buf; } - protected override StringBuilder AppendRefTypeName (StringBuilder buf, TypeReference type, IAttributeParserContext context) + protected override StringBuilder AppendRefTypeName (StringBuilder buf, ByReferenceType type, IAttributeParserContext context) { return base.AppendRefTypeName (buf, type, context).Append (RefTypeModifier); } |