Skip to content

Commit 64a43ac

Browse files
TianqiZhangjoelmartinez
authored andcommitted
monikerize interfaces and member implements in ECMAXML
1 parent 54dd5da commit 64a43ac

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

mdoc/Mono.Documentation/MDocUpdater.cs

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2289,12 +2289,19 @@ public void UpdateType (XmlElement root, TypeDefinition type, FrameworkTypeEntry
22892289
.ToList ();
22902290

22912291
XmlElement interfaces = WriteElement (root, "Interfaces");
2292-
interfaces.RemoveAll ();
2292+
if (typeEntry.IsOnFirstFramework)
2293+
{
2294+
interfaces.RemoveAll();
2295+
}
2296+
22932297
foreach (string iname in interface_names)
22942298
{
2295-
XmlElement iface = root.OwnerDocument.CreateElement ("Interface");
2296-
interfaces.AppendChild (iface);
2297-
WriteElementText (iface, "InterfaceName", iname);
2299+
XmlElement iface = WriteElementWithSubElementText(interfaces, "Interface", "InterfaceName", iname);
2300+
iface.AddFrameworkToElement(typeEntry.Framework);
2301+
if (typeEntry.IsOnLastFramework)
2302+
{
2303+
iface.ClearFrameworkIfAll(typeEntry.Framework.AllFrameworksWithType(typeEntry));
2304+
}
22982305
}
22992306
}
23002307
else
@@ -2839,7 +2846,13 @@ private static void AddImplementedMembers(FrameworkTypeEntry typeEntry, MemberRe
28392846
foreach (var implementedMember in implementedMembers)
28402847
{
28412848
var value = msxdocxSlashdocFormatter.GetDeclaration(implementedMember);
2842-
WriteElementWithText(e, "InterfaceMember", value);
2849+
var interfaceMemberElement = WriteElementWithText(e, "InterfaceMember", value);
2850+
2851+
interfaceMemberElement.AddFrameworkToElement(typeEntry.Framework);
2852+
if (typeEntry.IsMemberOnLastFramework(mi))
2853+
{
2854+
interfaceMemberElement.ClearFrameworkIfAll(typeEntry.AllFrameworkStringForMember(mi));
2855+
}
28432856
}
28442857

28452858
if (e.ParentNode == null)
@@ -3371,6 +3384,33 @@ internal static XmlElement WriteElementWithText(XmlNode parent, string elementNa
33713384
parent.AppendChild(element);
33723385
}
33733386
return element;
3387+
}
3388+
3389+
internal static XmlElement WriteElementWithSubElementText(XmlNode parent, string elementName, string subElementName, string value)
3390+
{
3391+
XmlElement element = null;
3392+
XmlElement subElement = null;
3393+
foreach (var elementCandidate in parent.ChildNodes.SafeCast<XmlElement>().Where(e => e.Name == elementName))
3394+
{
3395+
var subElementCandidate = elementCandidate.ChildNodes.SafeCast<XmlElement>().FirstOrDefault(e => e.Name == subElementName && e.InnerText == value);
3396+
if (subElementCandidate != null)
3397+
{
3398+
element = elementCandidate;
3399+
subElement = subElementCandidate;
3400+
break;
3401+
}
3402+
}
3403+
3404+
// Create element if not exsits
3405+
if (subElement == null)
3406+
{
3407+
element = parent.OwnerDocument.CreateElement(elementName);
3408+
subElement = parent.OwnerDocument.CreateElement(subElementName);
3409+
subElement.InnerText = value;
3410+
element.AppendChild(subElement);
3411+
parent.AppendChild(element);
3412+
}
3413+
return element;
33743414
}
33753415

33763416
static XmlElement AppendElementText (XmlNode parent, string element, string value)

mdoc/Resources/monodoc-ecma.xsd

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ add masterdoc support?
7979
<xs:element name="pre" />
8080
<xs:element name="ReturnType" type="xs:string" />
8181
<xs:element name="TypeExcluded" type="xs:string" />
82-
<xs:element name="InterfaceMember" type="xs:string" />
8382

8483
<!-- define complex elements -->
8584
<xs:element name="BaseTypeName">
@@ -422,12 +421,19 @@ add masterdoc support?
422421
</xs:complexType>
423422
</xs:element>
424423

424+
<xs:element name="InterfaceMember">
425+
<xs:complexType>
426+
<xs:attribute name="FrameworkAlternate" use="optional" />
427+
</xs:complexType>
428+
</xs:element>
429+
425430
<xs:element name="Interface">
426431
<xs:complexType>
427432
<xs:sequence>
428433
<xs:element ref="InterfaceName" />
429434
<xs:element ref="Excluded" minOccurs="0" />
430435
</xs:sequence>
436+
<xs:attribute name="FrameworkAlternate" use="optional" />
431437
</xs:complexType>
432438
</xs:element>
433439

0 commit comments

Comments
 (0)