@@ -78,7 +78,6 @@ static XDocument loadDoc(string path)
78
78
var doc = loadDoc ( docPath ) ;
79
79
var docMembers = doc . Root . Element ( DocElementNames . Members ) ;
80
80
int beforeCount = docMembers . Descendants ( DocElementNames . InheritDoc ) . Count ( ) ;
81
- int trimCount = 0 ;
82
81
83
82
if ( beforeCount == 0 && trimLevel == ApiLevel . None )
84
83
return ( 0 , 0 , 0 ) ;
@@ -100,39 +99,33 @@ static XDocument loadDoc(string path)
100
99
var refDocs = getRefDocs ( refPaths , addPaths , refCref , logger ) ;
101
100
logger . Write ( ILogger . Severity . Diag , "External ref docs found: " + refDocs . Root . Elements ( DocElementNames . Member ) . Count ( ) . ToString ( ) ) ;
102
101
103
- if ( trimLevel > ApiLevel . None )
104
- beforeCount = docMembers . Descendants ( DocElementNames . InheritDoc ) . Count ( dm => ! dm . Ancestors ( DocElementNames . Member ) . Any ( m => m . HasAttribute ( DocAttributeNames . _trimmed ) ) ) ;
102
+ beforeCount = docMembers . Descendants ( DocElementNames . InheritDoc ) . Count ( dm => ! dm . Ancestors ( DocElementNames . Member ) . Any ( m => m . HasAttribute ( DocAttributeNames . _trimmed ) || m . HasAttribute ( DocAttributeNames . _gencode ) ) ) ;
105
103
106
104
var mem = default ( XElement ) ;
107
105
while ( ( mem = docMembers . Elements ( DocElementNames . Member ) . FirstOrDefault ( isInheritDocCandidate ) ) is not null )
108
106
replaceInheritDoc ( docPath , mem , docMap , docMembers , refDocs , logger ) ;
109
107
110
- foreach ( var md in docMembers . Elements ( DocElementNames . Member ) )
111
- {
112
- if ( md . HasAttribute ( DocAttributeNames . _visited ) )
113
- md . SetAttributeValue ( DocAttributeNames . _visited , null ) ;
114
-
115
- if ( md . HasAttribute ( DocAttributeNames . _gencode ) )
116
- md . SetAttributeValue ( DocAttributeNames . _gencode , null ) ;
117
- }
108
+ var totrim = docMembers . Elements ( DocElementNames . Member ) . Where ( m => m . HasAttribute ( DocAttributeNames . _trimmed ) || ( m . HasAttribute ( DocAttributeNames . _gencode ) && ! m . Elements ( ) . Any ( e => e . Name != DocElementNames . InheritDoc ) ) ) . ToList ( ) ;
109
+ int trimCount = totrim . Count ;
118
110
119
- if ( trimLevel > ApiLevel . None )
111
+ foreach ( var md in totrim )
120
112
{
121
- var totrim = docMembers . Elements ( DocElementNames . Member ) . Where ( m => m . HasAttribute ( DocAttributeNames . _trimmed ) ) . ToList ( ) ;
122
- trimCount = totrim . Count ( ) ;
113
+ string reason = md . HasAttribute ( DocAttributeNames . _gencode ) && ! md . Elements ( ) . Any ( e => e . Name != DocElementNames . InheritDoc ) ? "generated" : trimLevel == ApiLevel . Private ? "private" : "non-public" ;
114
+ logger . Write ( ILogger . Severity . Diag , "Trimming " + reason + " doc: " + ( string ) md . Attribute ( DocAttributeNames . Name ) ) ;
123
115
124
- foreach ( var md in totrim )
125
- {
126
- logger . Write ( ILogger . Severity . Diag , "Trimming " + ( trimLevel == ApiLevel . Private ? "private" : "non-public" ) + " doc: " + ( string ) md . Attribute ( DocAttributeNames . Name ) ) ;
116
+ if ( md . PreviousNode . IsWhiteSpace ( ) )
117
+ md . PreviousNode . Remove ( ) ;
127
118
128
- if ( md . PreviousNode . IsWhiteSpace ( ) )
129
- md . PreviousNode . Remove ( ) ;
130
-
131
- md . Remove ( ) ;
132
- }
119
+ md . Remove ( ) ;
133
120
}
134
121
135
- int afterCount = docMembers . Descendants ( DocElementNames . InheritDoc ) . Count ( ) ;
122
+ int afterCount = docMembers . Descendants ( DocElementNames . InheritDoc ) . Count ( dm => ! dm . Ancestors ( DocElementNames . Member ) . Any ( m => m . HasAttribute ( DocAttributeNames . _gencode ) ) ) ;
123
+
124
+ foreach ( var md in docMembers . Elements ( DocElementNames . Member ) . Where ( m => m . HasAttribute ( DocAttributeNames . _visited ) || m . HasAttribute ( DocAttributeNames . _gencode ) ) )
125
+ {
126
+ md . SetAttributeValue ( DocAttributeNames . _visited , null ) ;
127
+ md . SetAttributeValue ( DocAttributeNames . _gencode , null ) ;
128
+ }
136
129
137
130
using var writer = XmlWriter . Create ( outPath , new XmlWriterSettings { Encoding = new UTF8Encoding ( false ) , IndentChars = " " } ) ;
138
131
doc . Save ( writer ) ;
@@ -181,9 +174,7 @@ private static IDictionary<string, IEnumerable<DocMatch>> generateDocMap(IList<T
181
174
182
175
foreach ( var bt in t . GetBaseCandidates ( ) )
183
176
{
184
- var rbt = bt . Resolve ( ) ;
185
- string cref = rbt . GetDocID ( ) ;
186
-
177
+ string cref = bt . Resolve ( ) . GetDocID ( ) ;
187
178
if ( dml . Count == 0 || crefs . Contains ( cref ) )
188
179
dml . Add ( new DocMatch ( cref , t , bt ) ) ;
189
180
@@ -205,14 +196,20 @@ private static IDictionary<string, IEnumerable<DocMatch>> generateDocMap(IList<T
205
196
// If no docs for public explicit interface implementation, inject them
206
197
// including the whitespace they would have had if they had been there.
207
198
if ( idx == 0 && ( om ? . DeclaringType . GetApiLevel ( ) ?? ApiLevel . None ) > trimLevel && t . GetApiLevel ( ) > trimLevel && ! findDocsByID ( docMembers , memID ) . Any ( ) )
199
+ {
200
+ if ( docMembers . LastNode . IsWhiteSpace ( ) )
201
+ docMembers . LastNode . Remove ( ) ;
202
+
208
203
docMembers . Add (
209
- new XText ( " " ) ,
204
+ new XText ( "\n " ) ,
210
205
new XElement ( DocElementNames . Member ,
211
206
new XAttribute ( DocAttributeNames . Name , memID ) ,
207
+ new XAttribute ( DocAttributeNames . _gencode , true ) ,
212
208
new XText ( "\n " ) , new XElement ( DocElementNames . InheritDoc ) ,
213
209
new XText ( "\n " ) ) ,
214
210
new XText ( "\n " )
215
211
) ;
212
+ }
216
213
217
214
var methDocs = findDocsByID ( docMembers , memID ) ;
218
215
if ( ( om ? . DeclaringType . GetApiLevel ( ) ?? m . GetApiLevel ( ) ) <= trimLevel )
@@ -234,7 +231,7 @@ private static IDictionary<string, IEnumerable<DocMatch>> generateDocMap(IList<T
234
231
var crefs = methDocs . Descendants ( DocElementNames . InheritDoc ) . Select ( i => ( string ) i . Attribute ( DocAttributeNames . Cref ) ) . Where ( c => ! string . IsNullOrWhiteSpace ( c ) ) . ToHashSet ( ) ;
235
232
var dml = new List < DocMatch > ( ) ;
236
233
237
- var bases = om is not null ? ( new [ ] { om } ) . Concat ( m . GetBaseCandidates ( ) ) : m . GetBaseCandidates ( ) ;
234
+ var bases = ( om is not null ? ( new [ ] { om } ) : [ ] ) . Concat ( m . GetBaseCandidates ( ) ) ;
238
235
foreach ( var ( bm , cref ) in bases . SelectMany ( bm => bm . GetDocID ( ) . Select ( d => ( bm , d ) ) ) )
239
236
{
240
237
if ( dml . Count == 0 || crefs . Contains ( cref ) )
0 commit comments