Skip to content

Commit 8adc14d

Browse files
authored
Merge pull request #626 from mono/develop
πŸš€πŸš€πŸš€ bump mdoc to 5.8.9
2 parents 489be60 + f6759c1 commit 8adc14d

16 files changed

Lines changed: 198 additions & 20 deletions
6.5 KB
Binary file not shown.

β€Žmdoc/Consts.csβ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace Mono.Documentation
33
{
44
public static class Consts
55
{
6-
public static string MonoVersion = "5.8.8";
6+
public static string MonoVersion = "5.8.9";
77
public const string DocId = "DocId";
88
public const string CppCli = "C++ CLI";
99
public const string CppCx = "C++ CX";
@@ -49,8 +49,10 @@ public static class Consts
4949
public const string IsByRefLikeAttribute = "System.Runtime.CompilerServices.IsByRefLikeAttribute";
5050
public const string IsReadOnlyAttribute = "System.Runtime.CompilerServices.IsReadOnlyAttribute";
5151
public const string InAttribute = "System.Runtime.InteropServices.InAttribute";
52+
public const string OutAttribute = "System.Runtime.InteropServices.OutAttribute";
5253
public const string TupleElementNamesAttribute = "System.Runtime.CompilerServices.TupleElementNamesAttribute";
5354
public const string IsExternalInit = "System.Runtime.CompilerServices.IsExternalInit";
5455
public const string NativeIntegerAttribute = "System.Runtime.CompilerServices.NativeIntegerAttribute";
56+
public const string CallConvPrefix = "System.Runtime.CompilerServices.CallConv";
5557
}
5658
}

β€Žmdoc/Mono.Documentation/Updater/DocumentationEnumerator.csβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ public static MemberReference GetMember (TypeDefinition type, DocumentationMembe
153153

154154
string xmlMemberType = member.Parameters[i];
155155

156+
// After we support function pointers, "method" as type should be skipped and not be compared with current function pointer type.
157+
if (xmlMemberType == "method") continue;
158+
156159
// TODO: take into account extension method reftype
157160
bool xmlIsRefType = xmlMemberType.Contains ('&');
158161
bool refTypesMatch = isRefType == xmlIsRefType;

β€Žmdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.csβ€Ž

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ο»Ώusing Mono.Cecil;
22
using Mono.Documentation.Util;
33
using System;
4+
using System.Collections;
45
using System.Collections.Generic;
56
using System.Linq;
67
using System.Text;
@@ -591,43 +592,51 @@ private StringBuilder AppendParameters (StringBuilder buf, MethodDefinition meth
591592
{
592593
if (DocUtils.IsExtensionMethod (method))
593594
buf.Append ("this ");
594-
AppendParameter (buf, parameters[0]);
595+
AppendParameter(buf, parameters[0]);
595596
for (int i = 1; i < parameters.Count; ++i)
596597
{
597-
buf.Append (", ");
598-
AppendParameter (buf, parameters[i]);
598+
buf.Append(", ");
599+
AppendParameter(buf, parameters[i]);
599600
}
600601
}
601602

602603
return buf.Append (end);
603604
}
604605

605-
private StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
606+
protected override StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameter)
606607
{
607608
TypeReference parameterType = parameter.ParameterType;
609+
var refType = new BitArray(3);
608610

609611
if (parameterType is RequiredModifierType requiredModifierType)
610612
{
613+
switch(requiredModifierType.ModifierType.FullName)
614+
{
615+
case Consts.InAttribute: refType.Set(0, true); break;
616+
case Consts.OutAttribute: refType.Set(1, true); break;
617+
default: break;
618+
}
611619
parameterType = requiredModifierType.ElementType;
612620
}
613-
614621
if (parameterType is ByReferenceType byReferenceType)
615622
{
616623
if (parameter.IsOut)
617624
{
618-
buf.Append ("out ");
625+
refType.Set(1, true);
619626
}
620627
else if(parameter.IsIn && DocUtils.HasCustomAttribute(parameter, Consts.IsReadOnlyAttribute))
621628
{
622-
buf.Append("in ");
629+
refType.Set(0, true);
623630
}
624631
else
625632
{
626-
buf.Append("ref ");
633+
refType.Set(2, true);
627634
}
628635
parameterType = byReferenceType.ElementType;
629636
}
630637

638+
buf.Append(refType.Get(0) ? "in " : (refType.Get(1) ? "out " : (refType.Get(2) ? "ref ": "")));
639+
631640
if (parameter.HasCustomAttributes)
632641
{
633642
var isParams = parameter.CustomAttributes.Any (ca => ca.AttributeType.Name == "ParamArrayAttribute");
@@ -639,8 +648,7 @@ private StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition pa
639648
var isNullableType = context.IsNullable ();
640649
buf.Append (GetTypeName (parameterType, context));
641650
buf.Append (GetTypeNullableSymbol (parameter.ParameterType, isNullableType));
642-
buf.Append (" ");
643-
buf.Append (parameter.Name);
651+
buf.Append (string.IsNullOrEmpty(parameter.Name) ? "" : " " + parameter.Name);
644652

645653
if (parameter.HasDefault && parameter.IsOptional && parameter.HasConstant)
646654
{

β€Žmdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.csβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ private StringBuilder AppendParameters (StringBuilder buf,IList<ParameterDefinit
715715
return buf.Append (end);
716716
}
717717

718-
protected virtual StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
718+
protected override StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
719719
{
720720
if (parameter.ParameterType is ByReferenceType)
721721
{

β€Žmdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.csβ€Ž

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
ο»Ώnamespace Mono.Documentation.Updater
1+
ο»Ώusing Mono.Cecil;
2+
using System.Text;
3+
4+
namespace Mono.Documentation.Updater
25
{
36
class DocTypeFullMemberFormatter : MemberFormatter
47
{
@@ -20,5 +23,10 @@ protected override string NestedTypeSeparator
2023
{
2124
get { return "+"; }
2225
}
26+
27+
protected override StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameterDef)
28+
{
29+
return buf.Append(GetName(parameterDef.ParameterType, useTypeProjection: false, isTypeofOperator: false));
30+
}
2331
}
2432
}

β€Žmdoc/Mono.Documentation/Updater/Formatters/FSharpFormatter.csβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ protected override StringBuilder AppendParameters(StringBuilder buf, MethodDefin
692692
return buf;
693693
}
694694

695-
private void AppendParameter(StringBuilder buf, ParameterDefinition parameter)
695+
protected override StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameter)
696696
{
697697
bool isFSharpFunction = IsFSharpFunction(parameter.ParameterType);
698698
if (isFSharpFunction)
@@ -701,6 +701,7 @@ private void AppendParameter(StringBuilder buf, ParameterDefinition parameter)
701701
buf.Append(typeName);
702702
if (isFSharpFunction)
703703
buf.Append(")");
704+
return buf;
704705
}
705706

706707
protected override string GetPropertyDeclaration(PropertyDefinition property)

β€Žmdoc/Mono.Documentation/Updater/Formatters/ILFullMemberFormatter.csβ€Ž

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ private StringBuilder AppendParameters (StringBuilder buf, MethodDefinition meth
440440
return buf.Append (end);
441441
}
442442

443-
private StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
443+
protected override StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
444444
{
445445
if (parameter.ParameterType is ByReferenceType)
446446
{
@@ -599,5 +599,10 @@ protected override string GetEventDeclaration (EventDefinition e)
599599

600600
return buf.ToString ();
601601
}
602+
603+
protected override void AppendFunctionPointerTypeName(StringBuilder buf, FunctionPointerType type, IAttributeParserContext context)
604+
{
605+
buf.Append("method");
606+
}
602607
}
603608
}

β€Žmdoc/Mono.Documentation/Updater/Formatters/JsFormatter.csβ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ protected override StringBuilder AppendParameters(StringBuilder buf, MethodDefin
136136
return buf.Append(string.Join(", ", parameters.Select(i => i.Name)));
137137
}
138138

139+
protected override StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameter)
140+
{
141+
return buf.Append(parameter.Name);
142+
}
143+
139144
protected MethodDefinition GetConstructor(TypeDefinition type)
140145
{
141146
return type.GetConstructors()

β€Žmdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.csβ€Ž

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
ο»Ώusing Mono.Cecil;
2+
using Mono.Documentation.Updater.Formatters;
23
using Mono.Documentation.Util;
34
using System;
45
using System.Collections.Generic;
@@ -131,6 +132,69 @@ protected virtual StringBuilder AppendArrayTypeName(StringBuilder buf, TypeRefer
131132
return AppendArrayModifiers (buf, (ArrayType)type);
132133
}
133134

135+
protected virtual void AppendFunctionPointerTypeName(StringBuilder buf, FunctionPointerType type, IAttributeParserContext context)
136+
{
137+
buf.Append("delegate*");
138+
139+
var callingConvention = GetCallingConvention(type);
140+
if (callingConvention != MethodCallingConvention.Default.ToString())
141+
{
142+
buf.Append(" unmanaged");
143+
if (!string.IsNullOrEmpty(callingConvention))
144+
{
145+
buf.Append("[").Append(callingConvention).Append("]");
146+
}
147+
}
148+
149+
buf.Append("<");
150+
if (type.Parameters?.Count > 0)
151+
{
152+
for (int i = 0; i < type.Parameters.Count; i++)
153+
{
154+
AppendParameter(buf, type.Parameters[i]);
155+
buf.Append(", ");
156+
}
157+
}
158+
AppendReturnTypeName(buf, type, true);
159+
buf.Append(">");
160+
}
161+
162+
private string GetCallingConvention(FunctionPointerType type)
163+
{
164+
var callingConvention = type.CallingConvention.ToString("D");
165+
// Cecil lib uses "9" to stands for "Unmanaged Ext"
166+
if (callingConvention != "9")
167+
{
168+
return NormalizeCallingConvention(type.CallingConvention);
169+
}
170+
else
171+
{
172+
StringBuilder buf = new StringBuilder();
173+
AssembleCallingConvention(type.ReturnType, buf);
174+
return buf.ToString();
175+
}
176+
}
177+
178+
private string NormalizeCallingConvention(MethodCallingConvention callingConvention)
179+
{
180+
if (callingConvention == MethodCallingConvention.C) return "Cdecl";
181+
var callConv = callingConvention.ToString().ToLower();
182+
return char.ToUpper(callConv[0]) + callConv.Substring(1);
183+
}
184+
185+
private void AssembleCallingConvention(TypeReference type, StringBuilder buf)
186+
{
187+
if (!(type is OptionalModifierType optionalModifierType)) return;
188+
189+
var modifier = optionalModifierType.ModifierType.FullName;
190+
if (modifier.StartsWith(Consts.CallConvPrefix))
191+
{
192+
if (!string.IsNullOrEmpty(buf.ToString())) buf.Append(", ");
193+
buf.Append(modifier.Substring(Consts.CallConvPrefix.Length));
194+
AssembleCallingConvention(optionalModifierType.ElementType, buf);
195+
}
196+
}
197+
134198
protected virtual bool ShouldStripModFromTypeName
135199
{
136200
get => true;
@@ -168,6 +232,11 @@ protected StringBuilder _AppendTypeName (StringBuilder buf, TypeReference type,
168232
AppendPointerTypeName (interimBuilder, type, context);
169233
return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection);
170234
}
235+
if (type is FunctionPointerType functionPointerType)
236+
{
237+
AppendFunctionPointerTypeName(interimBuilder, functionPointerType, context);
238+
return SetBuffer(buf, interimBuilder, useTypeProjection: useTypeProjection);
239+
}
171240
if (type is GenericParameter)
172241
{
173242
AppendTypeName (interimBuilder, type, context);
@@ -562,15 +631,14 @@ protected virtual string GetMethodDeclaration (MethodDefinition method)
562631
}
563632

564633

565-
private StringBuilder AppendReturnTypeName (StringBuilder buf, MethodDefinition method)
634+
protected StringBuilder AppendReturnTypeName (StringBuilder buf, IMethodSignature method, bool noTrailingSpace = false)
566635
{
567636
var context = AttributeParserContext.Create (method.MethodReturnType);
568637
var isNullableType = context.IsNullable ();
569638
var returnTypeName = GetTypeName (method.ReturnType, context);
570639
buf.Append (returnTypeName);
571640
buf.Append (GetTypeNullableSymbol (method.ReturnType, isNullableType));
572-
buf.Append (" ");
573-
641+
buf.Append (noTrailingSpace ? "" : " ");
574642
return buf;
575643
}
576644

@@ -604,6 +672,11 @@ protected virtual StringBuilder AppendParameters (StringBuilder buf, MethodDefin
604672
return buf;
605673
}
606674

675+
protected virtual StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameterDef)
676+
{
677+
return buf;
678+
}
679+
607680
protected virtual StringBuilder AppendGenericMethodConstraints (StringBuilder buf, MethodDefinition method)
608681
{
609682
return buf;

0 commit comments

Comments
Β (0)