Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/api-doc-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuangmin-ms <huangmin@microsoft.com>2022-11-08 09:03:26 +0300
committerhuangmin-ms <huangmin@microsoft.com>2022-11-08 09:03:26 +0300
commit1de78a32bbce09bd4a12115e34e0b3d972ebae7b (patch)
tree19edb4e95207624d7fdc99b7c68bfad21664f6db
parent782002b08cd6737b7d03ee5e62cca3a144278a1d (diff)
Support EII of static abstract members in interface
-rw-r--r--external/Test/StaticVirtualMembers.dllbin6144 -> 8192 bytes
-rw-r--r--mdoc/Mono.Documentation/Updater/DocUtils.cs13
-rw-r--r--mdoc/mdoc.Test/FormatterTests.cs41
3 files changed, 53 insertions, 1 deletions
diff --git a/external/Test/StaticVirtualMembers.dll b/external/Test/StaticVirtualMembers.dll
index 2966a05f..2a18b555 100644
--- a/external/Test/StaticVirtualMembers.dll
+++ b/external/Test/StaticVirtualMembers.dll
Binary files differ
diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs
index e7cbc2f8..d78a760d 100644
--- a/mdoc/Mono.Documentation/Updater/DocUtils.cs
+++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs
@@ -161,7 +161,18 @@ namespace Mono.Documentation.Updater
public static bool IsExplicitlyImplemented (MethodDefinition method)
{
- return method != null && method.IsPrivate && method.IsFinal && method.IsVirtual;
+ if (method == null || !method.IsPrivate)
+ {
+ return false;
+ }
+
+ if (method.IsFinal && method.IsVirtual)
+ {
+ return true;
+ }
+
+ // Support C# 11 EII for static abstract members in interface
+ return method.IsStatic && method.HasOverrides;
}
public static string GetTypeDotMember (string name)
diff --git a/mdoc/mdoc.Test/FormatterTests.cs b/mdoc/mdoc.Test/FormatterTests.cs
index f9ded8d5..38618f28 100644
--- a/mdoc/mdoc.Test/FormatterTests.cs
+++ b/mdoc/mdoc.Test/FormatterTests.cs
@@ -566,6 +566,47 @@ namespace mdoc.Test
Assert.AreEqual(expectedSignature, eventSignature);
}
+ [TestCase("StaticVirtualMembers.Derived","M", "public static void M ();")]
+ [TestCase("StaticVirtualMembers.Derived",
+ "StaticVirtualMembers.StaticVirtualMemberInInterface<StaticVirtualMembers.Derived,StaticVirtualMembers.Derived,System.Int32>.M",
+ "static void StaticVirtualMemberInInterface<Derived,Derived,int>.M ();")]
+ [TestCase("StaticVirtualMembers.Derived",
+ "StaticVirtualMembers.StaticVirtualMemberInInterface<StaticVirtualMembers.Derived,StaticVirtualMembers.Derived,System.Int32>.ToBeImplemented",
+ "void StaticVirtualMemberInInterface<Derived,Derived,int>.ToBeImplemented ();")]
+ [TestCase("StaticVirtualMembers.Derived",
+ "StaticVirtualMembers.StaticVirtualMemberInInterface<StaticVirtualMembers.Derived,StaticVirtualMembers.Derived,System.Int32>.op_Addition",
+ "static int StaticVirtualMemberInInterface<Derived,Derived,int>.op_Addition (Derived left, Derived right);")]
+ public void CSharpStaticMethodImplementation(string typeFullName, string methodName, string expectedSignature)
+ {
+ var staticVirtualMemberDllPath = "../../../../external/Test/StaticVirtualMembers.dll";
+ var type = GetType(staticVirtualMemberDllPath, typeFullName);
+ var method = GetMethod(type, m => m.Name == methodName);
+ var methodSignature = formatter.GetDeclaration(method);
+ Assert.AreEqual(expectedSignature, methodSignature);
+ }
+
+ [TestCase("StaticVirtualMembers.ClassC", "StaticVirtualMembers.InterfaceI<StaticVirtualMembers.ClassC>.P",
+ "static ClassC StaticVirtualMembers.InterfaceI<StaticVirtualMembers.ClassC>.P { get; set; }")]
+ public void CSharpStaticPropertyImplementation(string typeFullName, string propertyName, string expectedSignature)
+ {
+ var staticVirtualMemberDllPath = "../../../../external/Test/StaticVirtualMembers.dll";
+ var type = GetType(staticVirtualMemberDllPath, typeFullName);
+ var property = GetProperty(type, propertyName);
+ var propertySignature = formatter.GetDeclaration(property);
+ Assert.AreEqual(expectedSignature, propertySignature);
+ }
+
+ [TestCase("StaticVirtualMembers.ClassC", "StaticVirtualMembers.InterfaceI<StaticVirtualMembers.ClassC>.E",
+ "static event Action StaticVirtualMembers.InterfaceI<StaticVirtualMembers.ClassC>.E;")]
+ public void CSharpStaticEventImplementation(string typeFullName, string eventName, string expectedSignature)
+ {
+ var staticVirtualMemberDllPath = "../../../../external/Test/StaticVirtualMembers.dll";
+ var type = GetType(staticVirtualMemberDllPath, typeFullName);
+ var e = GetEvent(type, eventName);
+ var eventSignature = formatter.GetDeclaration(e);
+ Assert.AreEqual(expectedSignature, eventSignature);
+ }
+
#region Helper Methods
string RealTypeName(string name){
switch (name) {