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:
authorJoel Martinez <joelmartinez@gmail.com>2017-03-15 00:37:58 +0300
committerJoel Martinez <joelmartinez@gmail.com>2017-03-15 00:37:58 +0300
commit1c142b7fc3b144c9596d8797dd15576c8fd8bbf5 (patch)
treefd808b9c1c4e9cbf9f46df5cf76cd782cd6eab5f
parent82def9b9bd018dab780a9f98c674155d085b7ed3 (diff)
mdoc: Resolves issue in fx mode with overridden members.
When a type overrides a member in one framework, but does not in another framework processed after the first, the Member node was being removed, even though the entry remained in teh first framework index file. This Resolves #39
-rw-r--r--mdoc/Mono.Documentation/Frameworks/FrameworkEntry.cs12
-rw-r--r--mdoc/Mono.Documentation/Frameworks/FrameworkIndex.cs2
-rw-r--r--mdoc/Mono.Documentation/Frameworks/FrameworkTypeEntry.cs19
-rw-r--r--mdoc/Mono.Documentation/monodocer.cs14
-rw-r--r--mdoc/Test/DocTest-framework-inheritance.cs21
-rw-r--r--mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/One.xml7
-rw-r--r--mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/Two.xml6
-rw-r--r--mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassOne.xml42
-rw-r--r--mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassTwo.xml63
-rw-r--r--mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyClass.xml38
10 files changed, 220 insertions, 4 deletions
diff --git a/mdoc/Mono.Documentation/Frameworks/FrameworkEntry.cs b/mdoc/Mono.Documentation/Frameworks/FrameworkEntry.cs
index bcd7c2b4..7539dd59 100644
--- a/mdoc/Mono.Documentation/Frameworks/FrameworkEntry.cs
+++ b/mdoc/Mono.Documentation/Frameworks/FrameworkEntry.cs
@@ -10,10 +10,21 @@ namespace Mono.Documentation
{
SortedSet<FrameworkTypeEntry> types = new SortedSet<FrameworkTypeEntry> ();
+ List<FrameworkEntry> allframeworks;
+
+ public FrameworkEntry (List<FrameworkEntry> frameworks)
+ {
+ allframeworks = frameworks;
+ if (allframeworks == null)
+ allframeworks = new List<FrameworkEntry> (0);
+ }
+
public string Name { get; set; }
public ISet<FrameworkTypeEntry> Types { get { return this.types; } }
+ public IEnumerable<FrameworkEntry> Frameworks { get { return this.allframeworks; } }
+
public static readonly FrameworkEntry Empty = new EmptyFrameworkEntry () { Name = "Empty" };
public virtual FrameworkTypeEntry ProcessType (TypeDefinition type)
@@ -32,6 +43,7 @@ namespace Mono.Documentation
class EmptyFrameworkEntry : FrameworkEntry
{
+ public EmptyFrameworkEntry () : base (null) { }
public override FrameworkTypeEntry ProcessType (TypeDefinition type) { return FrameworkTypeEntry.Empty; }
}
}
diff --git a/mdoc/Mono.Documentation/Frameworks/FrameworkIndex.cs b/mdoc/Mono.Documentation/Frameworks/FrameworkIndex.cs
index d595428a..e5a9ab67 100644
--- a/mdoc/Mono.Documentation/Frameworks/FrameworkIndex.cs
+++ b/mdoc/Mono.Documentation/Frameworks/FrameworkIndex.cs
@@ -40,7 +40,7 @@ namespace Mono.Documentation
var entry = frameworks.FirstOrDefault (f => f.Name.Equals (shortPath));
if (entry == null) {
- entry = new FrameworkEntry { Name = shortPath };
+ entry = new FrameworkEntry (frameworks) { Name = shortPath };
frameworks.Add (entry);
}
return entry;
diff --git a/mdoc/Mono.Documentation/Frameworks/FrameworkTypeEntry.cs b/mdoc/Mono.Documentation/Frameworks/FrameworkTypeEntry.cs
index 3f9e1077..9bf96aed 100644
--- a/mdoc/Mono.Documentation/Frameworks/FrameworkTypeEntry.cs
+++ b/mdoc/Mono.Documentation/Frameworks/FrameworkTypeEntry.cs
@@ -8,6 +8,10 @@ namespace Mono.Documentation
class FrameworkTypeEntry : IComparable<FrameworkTypeEntry>
{
SortedSet<string> members = new SortedSet<string> ();
+ SortedSet<string> memberscsharpsig = new SortedSet<string> ();
+
+ CSharpFullMemberFormatter formatter = new CSharpFullMemberFormatter ();
+
FrameworkEntry fx;
public static FrameworkTypeEntry Empty = new EmptyTypeEntry (FrameworkEntry.Empty) { Name = "Empty" };
@@ -37,6 +41,14 @@ namespace Mono.Documentation
}
else
members.Add (member.FullName);
+
+ // this is for lookup purposes
+ memberscsharpsig.Add(formatter.GetDeclaration (member));
+ }
+
+ public bool ContainsCSharpSig (string sig)
+ {
+ return memberscsharpsig.Contains (sig);
}
public override string ToString () => $"{this.Name} in {this.fx.Name}";
@@ -49,6 +61,13 @@ namespace Mono.Documentation
return string.Compare (this.Name, other.Name, StringComparison.CurrentCulture);
}
+ public override bool Equals (object obj)
+ {
+ FrameworkTypeEntry other = obj as FrameworkTypeEntry;
+ if (other == null) return false;
+ return this.Name.Equals (other.Name);
+ }
+
class EmptyTypeEntry : FrameworkTypeEntry
{
public EmptyTypeEntry (FrameworkEntry fx) : base (fx) { }
diff --git a/mdoc/Mono.Documentation/monodocer.cs b/mdoc/Mono.Documentation/monodocer.cs
index da11f003..dd6f103b 100644
--- a/mdoc/Mono.Documentation/monodocer.cs
+++ b/mdoc/Mono.Documentation/monodocer.cs
@@ -1220,6 +1220,20 @@ class MDocUpdater : MDocCommand
// Deleted (or signature changed)
if (oldmember2 == null) {
+ if (!string.IsNullOrWhiteSpace (FrameworksPath)) {
+ // verify that this member wasn't seen in another framework and is indeed valid
+ var sigFromXml = oldmember
+ .GetElementsByTagName ("MemberSignature")
+ .Cast<XmlElement> ()
+ .FirstOrDefault (x => x.GetAttribute ("Language").Equals ("C#"));
+
+ if (sigFromXml != null) {
+ var sigvalue = sigFromXml.GetAttribute ("Value");
+ if (typeEntry.Framework.Frameworks.Any (fx => fx.Types.Any (t => t.Equals(typeEntry) && t.ContainsCSharpSig (sigvalue))))
+ continue;
+ }
+ }
+
if (!no_assembly_versions && UpdateAssemblyVersions (oldmember, type.Module.Assembly, new string[]{ GetAssemblyVersion (type.Module.Assembly) }, false))
continue;
diff --git a/mdoc/Test/DocTest-framework-inheritance.cs b/mdoc/Test/DocTest-framework-inheritance.cs
index ca18dfff..675541ca 100644
--- a/mdoc/Test/DocTest-framework-inheritance.cs
+++ b/mdoc/Test/DocTest-framework-inheritance.cs
@@ -1,6 +1,15 @@
namespace MyNamespace {
- public abstract class MyBaseClassOne {}
- public abstract class MyBaseClassTwo {}
+ public abstract class MyBaseClassOne
+ {
+ public virtual string AllVirtual {get;}
+ public abstract void AllAbstract();
+ }
+ public abstract class MyBaseClassTwo
+ {
+ public string TwoMember {get;}
+ public virtual string AllVirtual {get;}
+ public abstract void AllAbstract();
+ }
public class MyClass
#if FXONE
@@ -9,5 +18,11 @@ namespace MyNamespace {
#if FXTWO
: MyBaseClassTwo
#endif
- {}
+ {
+ public override void AllAbstract() {}
+
+ #if FXONE
+ public override string AllVirtual { get { return ""; } }
+ #endif
+ }
}
diff --git a/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/One.xml b/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/One.xml
index 5c82e3fc..0f2f7d8b 100644
--- a/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/One.xml
+++ b/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/One.xml
@@ -3,12 +3,19 @@
<Namespace Name="MyNamespace">
<Type Name="MyNamespace.MyBaseClassOne" Id="T:MyNamespace.MyBaseClassOne">
<Member Id="M:MyNamespace.MyBaseClassOne.#ctor" />
+ <Member Id="M:MyNamespace.MyBaseClassOne.AllAbstract" />
+ <Member Id="P:MyNamespace.MyBaseClassOne.AllVirtual" />
</Type>
<Type Name="MyNamespace.MyBaseClassTwo" Id="T:MyNamespace.MyBaseClassTwo">
<Member Id="M:MyNamespace.MyBaseClassTwo.#ctor" />
+ <Member Id="M:MyNamespace.MyBaseClassTwo.AllAbstract" />
+ <Member Id="P:MyNamespace.MyBaseClassTwo.AllVirtual" />
+ <Member Id="P:MyNamespace.MyBaseClassTwo.TwoMember" />
</Type>
<Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
<Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.AllAbstract" />
+ <Member Id="P:MyNamespace.MyClass.AllVirtual" />
</Type>
</Namespace>
</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/Two.xml b/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/Two.xml
index 10bc5828..15aaa6da 100644
--- a/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/Two.xml
+++ b/mdoc/Test/en.expected-frameworks-inheritance/FrameworksIndex/Two.xml
@@ -3,12 +3,18 @@
<Namespace Name="MyNamespace">
<Type Name="MyNamespace.MyBaseClassOne" Id="T:MyNamespace.MyBaseClassOne">
<Member Id="M:MyNamespace.MyBaseClassOne.#ctor" />
+ <Member Id="M:MyNamespace.MyBaseClassOne.AllAbstract" />
+ <Member Id="P:MyNamespace.MyBaseClassOne.AllVirtual" />
</Type>
<Type Name="MyNamespace.MyBaseClassTwo" Id="T:MyNamespace.MyBaseClassTwo">
<Member Id="M:MyNamespace.MyBaseClassTwo.#ctor" />
+ <Member Id="M:MyNamespace.MyBaseClassTwo.AllAbstract" />
+ <Member Id="P:MyNamespace.MyBaseClassTwo.AllVirtual" />
+ <Member Id="P:MyNamespace.MyBaseClassTwo.TwoMember" />
</Type>
<Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
<Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.AllAbstract" />
</Type>
</Namespace>
</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassOne.xml b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassOne.xml
index 1f242b13..050370cd 100644
--- a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassOne.xml
+++ b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassOne.xml
@@ -36,5 +36,47 @@
<remarks>To be added.</remarks>
</Docs>
</Member>
+ <Member MemberName="AllAbstract">
+ <MemberSignature Language="C#" Value="public abstract void AllAbstract ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void AllAbstract() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AllVirtual">
+ <MemberSignature Language="C#" Value="public virtual string AllVirtual { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string AllVirtual" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
</Members>
</Type>
diff --git a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassTwo.xml b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassTwo.xml
index 7596f8b8..3b848109 100644
--- a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassTwo.xml
+++ b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyBaseClassTwo.xml
@@ -36,5 +36,68 @@
<remarks>To be added.</remarks>
</Docs>
</Member>
+ <Member MemberName="AllAbstract">
+ <MemberSignature Language="C#" Value="public abstract void AllAbstract ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void AllAbstract() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AllVirtual">
+ <MemberSignature Language="C#" Value="public virtual string AllVirtual { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string AllVirtual" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="TwoMember">
+ <MemberSignature Language="C#" Value="public string TwoMember { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string TwoMember" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
</Members>
</Type>
diff --git a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyClass.xml b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyClass.xml
index 090b4202..f4ac240c 100644
--- a/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyClass.xml
+++ b/mdoc/Test/en.expected-frameworks-inheritance/MyNamespace/MyClass.xml
@@ -37,5 +37,43 @@
<remarks>To be added.</remarks>
</Docs>
</Member>
+ <Member MemberName="AllAbstract">
+ <MemberSignature Language="C#" Value="public override void AllAbstract ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig virtual instance void AllAbstract() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-two</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AllVirtual">
+ <MemberSignature Language="C#" Value="public override string AllVirtual { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string AllVirtual" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-framework-inheritance-one</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
</Members>
</Type>