@@ -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 )
0 commit comments