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:
-rw-r--r--mdoc/Mono.Documentation/MDocUpdater.Member.cs30
-rw-r--r--mdoc/Mono.Documentation/MDocUpdater.cs14
-rw-r--r--mdoc/Mono.Documentation/Updater/DocUtils.cs30
3 files changed, 54 insertions, 20 deletions
diff --git a/mdoc/Mono.Documentation/MDocUpdater.Member.cs b/mdoc/Mono.Documentation/MDocUpdater.Member.cs
index c4e63cff..22b0f4ff 100644
--- a/mdoc/Mono.Documentation/MDocUpdater.Member.cs
+++ b/mdoc/Mono.Documentation/MDocUpdater.Member.cs
@@ -68,33 +68,29 @@ namespace Mono.Documentation
}
}
- internal static void CheckFrameworkAlternateAttribute(FrameworkTypeEntry entry, XmlElement element, string elementName)
+ internal static void ClearFrameworkAlternateIfAll(XmlElement element, string elementName, string allFrameworks)
{
- if (entry == null || element == null || string.IsNullOrEmpty(elementName))
+ if (element == null || string.IsNullOrEmpty(elementName) || string.IsNullOrEmpty(allFrameworks))
{
return;
}
- if (entry.Framework.IsLastFrameworkForType(entry))
+ var finalNodes = element.GetElementsByTagName(elementName).Cast<XmlElement>().ToArray();
+ foreach (var node in finalNodes)
{
- var allFrameworks = entry.Framework.AllFrameworksWithType(entry);
- var finalNodes = element.GetElementsByTagName(elementName).Cast<XmlElement>().ToArray();
- foreach (var node in finalNodes)
+ // if FXAlternate is entire list, just remove it
+ if (node.HasAttribute(Consts.FrameworkAlternate) && node.GetAttribute(Consts.FrameworkAlternate) == allFrameworks)
{
- // if FXAlternate is entire list, just remove it
- if (node.HasAttribute(Consts.FrameworkAlternate) && node.GetAttribute(Consts.FrameworkAlternate) == allFrameworks)
- {
- node.RemoveAttribute(Consts.FrameworkAlternate);
- }
+ node.RemoveAttribute(Consts.FrameworkAlternate);
}
+ }
- // if there are no fx attributes left, just remove the indices entirely
- if (!finalNodes.Any(n => n.HasAttribute(Consts.FrameworkAlternate)))
+ // if there are no fx attributes left, just remove the indices entirely
+ if (!finalNodes.Any(n => n.HasAttribute(Consts.FrameworkAlternate)))
+ {
+ foreach (var node in finalNodes)
{
- foreach (var node in finalNodes)
- {
- node.RemoveAttribute(Consts.Index);
- }
+ node.RemoveAttribute(Consts.Index);
}
}
}
diff --git a/mdoc/Mono.Documentation/MDocUpdater.cs b/mdoc/Mono.Documentation/MDocUpdater.cs
index e282e03b..c60eb222 100644
--- a/mdoc/Mono.Documentation/MDocUpdater.cs
+++ b/mdoc/Mono.Documentation/MDocUpdater.cs
@@ -4065,7 +4065,10 @@ namespace Mono.Documentation
}
}
- CheckFrameworkAlternateAttribute(typeEntry, e, "Parameter");
+ if (typeEntry.Framework.IsLastFrameworkForType(typeEntry))
+ {
+ ClearFrameworkAlternateIfAll(e, "Parameter", typeEntry.Framework.AllFrameworksWithType(typeEntry));
+ }
}
private void MakeTypeParameters (FrameworkTypeEntry entry, XmlElement root, IList<GenericParameter> typeParams, MemberReference member, bool shouldDuplicateWithNew)
@@ -4077,7 +4080,7 @@ namespace Mono.Documentation
XmlElement e = WriteElement(root, "TypeParameters");
- if (entry.Framework.IsFirstFrameworkForType(entry))
+ if (DocUtils.IsMemberOnFirstFramework(entry, member))
{
e.RemoveAll();
}
@@ -4115,6 +4118,8 @@ namespace Mono.Documentation
{
var xElement = existing.Element;
var fxaValue = FXUtils.AddFXToList(existing.FrameworkAlternates, entry.Framework.Name);
+ xElement.RemoveAttribute(Consts.Index);
+ xElement.SetAttribute(Consts.Index, i.ToString());
xElement.RemoveAttribute(Consts.FrameworkAlternate);
xElement.SetAttribute(Consts.FrameworkAlternate, fxaValue);
MakeParamsAttributes(existing.Element, AttributeFormatter.PreProcessCustomAttributes(t.CustomAttributes), entry, member);
@@ -4140,7 +4145,10 @@ namespace Mono.Documentation
}
}
- CheckFrameworkAlternateAttribute(entry, e, "TypeParameter");
+ if (DocUtils.IsMemberOnLastFramework(entry, member))
+ {
+ ClearFrameworkAlternateIfAll(e, "TypeParameter", DocUtils.GetAllFrameworksString(entry, member));
+ }
}
private void MakeParameters (XmlElement root, MemberReference mi, FrameworkTypeEntry typeEntry, ref bool fxAlternateTriggered, bool shouldDuplicateWithNew)
diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs
index c0bc1716..e7cbc2f8 100644
--- a/mdoc/Mono.Documentation/Updater/DocUtils.cs
+++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs
@@ -958,5 +958,35 @@ namespace Mono.Documentation.Updater
&& customAttrProvider.CustomAttributes.Any(attr => attr.AttributeType.FullName == attributeName);
}
}
+
+ public static bool IsMemberOnFirstFramework(FrameworkTypeEntry entry, MemberReference member)
+ {
+ if (entry == null || member == null)
+ {
+ return false;
+ }
+
+ return member is TypeDefinition ? entry.Framework.IsFirstFrameworkForType(entry) : entry.IsMemberOnFirstFramework(member);
+ }
+
+ public static bool IsMemberOnLastFramework(FrameworkTypeEntry entry, MemberReference member)
+ {
+ if (entry == null || member == null)
+ {
+ return false;
+ }
+
+ return member is TypeDefinition ? entry.Framework.IsLastFrameworkForType(entry) : entry.IsMemberOnLastFramework(member);
+ }
+
+ public static string GetAllFrameworksString(FrameworkTypeEntry entry, MemberReference member)
+ {
+ if (entry == null || member == null)
+ {
+ return null;
+ }
+
+ return member is TypeDefinition ? entry.Framework.AllFrameworksWithType(entry) : entry.AllFrameworkStringForMember(member);
+ }
}
}