diff options
-rw-r--r-- | mdoc/Mono.Documentation/MDocUpdater.Member.cs | 30 | ||||
-rw-r--r-- | mdoc/Mono.Documentation/MDocUpdater.cs | 14 | ||||
-rw-r--r-- | mdoc/Mono.Documentation/Updater/DocUtils.cs | 30 |
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);
+ }
}
}
|